一、创建学生成绩表(students)
要求:
学号(id )整型 自动增长 主键
姓名(s_name)变长字符串 非空
出生日期(s_birthdate)日期格式 非空
性别(s_gender)只能输入男或女 非空
家乡(s_hometown)'永年区', '肥乡区', '邯山区', '丛台区', '复兴区' 非空
语文(s_chinese)精确到小数点后2位 默认0分 大于等于0
数学(s_math)精确到小数点后2位 默认0分 大于等于0
外语(s_english)精确到小数点后2位 默认0分 大于等于0
计算机(s_computer) 精确到小数点后2位 默认0分 大于等于0
特长(s_specialty) 有无特长 默认无
create table students(
id int primary key auto_increment,
s_name varchar(20) not null,
s_birthdate date not null,
s_gender enum('男','女') not null,
s_hometown enum('永年区', '肥乡区', '邯山区', '丛台区', '复兴区') not null,
s_chinese decimal(5,2) default 0,
s_math decimal(5,2) default 0,
s_english decimal(5,2) default 0,
s_computer decimal(5,2) default 0,
s_specialty enum('是','否') default '否'
);
二、插入数据
create table students(
id int primary key auto_increment,
s_name varchar(20) not null,
s_birthdate date not null,
s_gender enum('男','女') not null,
s_hometown enum('永年区', '肥乡区', '邯山区', '丛台区', '复兴区') not null,
s_chinese decimal(5,2) default 0,
s_math decimal(5,2) default 0,
s_english decimal(5,2) default 0,
s_computer decimal(5,2) default 0,
s_specialty enum('是','否') default '否'
);
INSERT INTO students (s_name, s_birthdate, s_gender, s_hometown, s_chinese, s_math, s_english, s_computer, s_specialty) VALUES
('王浩', '2005-03-12', '男', '丛台区', 88.50, 92.00, 85.75, 78.25, '否'),
('李思雨', '2006-07-25', '女', '邯山区', 76.00, 68.50, 94.25, 82.00, '是'),
('张宇航', '2005-11-08', '男', '复兴区', 92.75, 85.00, 79.50, 91.25, '否'),
('陈晓萌', '2006-02-14', '女', '丛台区', 81.25, 77.50, 88.00, 84.75, '是'),
('赵子轩', '2005-09-30', '男', '肥乡区', 65.50, 93.75, 72.00, 89.50, '否'),
('刘雨欣', '2006-05-19', '女', '永年区', 95.00, 84.25, 90.50, 76.75, '否'),
('黄俊杰', '2005-12-05', '男', '丛台区', 78.75, 69.50, 81.25, 94.00, '是'),
('周诗涵', '2006-04-22', '女', '邯山区', 87.25, 91.00, 86.75, 80.50, '否'),
('吴天宇', '2005-08-17', '男', '复兴区', 72.50, 88.75, 73.25, 85.00, '否'),
('郑雨桐', '2006-01-09', '女', '丛台区', 93.00, 75.50, 97.25, 79.75, '是'),
('孙浩然', '2005-06-28', '男', '肥乡区', 84.75, 82.25, 68.50, 90.00, '否'),
('朱雅婷', '2006-10-15', '女', '永年区', 79.50, 96.75, 89.00, 83.25, '是'),
('徐子墨', '2005-04-03', '男', '丛台区', 91.25, 70.50, 84.75, 77.00, '否'),
('马欣怡', '2006-08-21', '女', '邯山区', 67.75, 89.25, 95.50, 86.75, '否'),
('高博文', '2005-02-18', '男', '复兴区', 88.00, 94.50, 78.25, 92.75, '是'),
('林若曦', '2006-11-27', '女', '丛台区', 75.25, 83.75, 91.00, 81.50, '否'),
('何俊豪', '2005-07-14', '男', '肥乡区', 96.50, 76.25, 82.75, 88.00, '否'),
('罗诗雨', '2006-03-05', '女', '永年区', 82.75, 90.00, 74.50, 93.25, '是'),
('梁家辉', '2005-10-31', '男', '丛台区', 89.25, 85.75, 87.00, 75.50, '否'),
('蔡雪晴', '2006-09-12', '女', '邯山区', 73.50, 78.25, 96.75, 84.00, '否'),
('宋哲瀚', '2005-01-25', '男', '复兴区', 94.00, 86.50, 80.25, 89.75, '是'),
('唐语嫣', '2006-06-08', '女', '丛台区', 80.75, 92.25, 83.50, 72.00, '否'),
('许嘉豪', '2005-12-19', '男', '肥乡区', 85.25, 79.75, 90.00, 87.50, '否'),
('邓雨菲', '2006-04-03', '女', '永年区', 77.00, 95.50, 85.75, 91.25, '是'),
('钟子涵', '2005-03-27', '男', '丛台区', 90.50, 81.25, 76.00, 94.75, '否'),
('袁欣悦', '2006-07-14', '女', '邯山区', 83.75, 87.00, 93.25, 79.50, '否'),
('崔天佑', '2005-11-22', '男', '复兴区', 71.25, 98.50, 84.75, 86.00, '是'),
('薛佳琪', '2006-02-09', '女', '丛台区', 97.00, 73.75, 88.50, 82.25, '否'),
('彭一鸣', '2005-05-16', '男', '肥乡区', 86.50, 89.25, 75.00, 95.75, '否'),
('丁雨萱', '2006-08-28', '女', '永年区', 78.25, 84.75, 97.50, 80.00, '是');
三、查询题目
查询所有学生的基本信息
查询所有学生的姓名和性别
查询所有女生的信息
查询来自丛台区的学生姓名和家乡
查询语文成绩大于90分的学生姓名和成绩
查询数学成绩在80分到90分之间的学生
查询有特长的学生信息
查询2006年出生的学生姓名和出生日期。YEAR(s_birthdate) = 2006
查询英语成绩不及格(小于60分)的学生
查询来自邯山区或复兴区的学生
查询计算机成绩高于数学成绩的学生
查询三科总分(语文+数学+英语)大于250分的学生
查询没有特长的男生。
查询语文和数学成绩都大于80分的学生
查询平均分(四科平均)大于85分的学生
查询来自永年区且英语成绩大于85分的女生
查询计算机成绩比英语成绩高10分以上的学生
查询2005年下半年出生的学生。 YEAR(s_birthdate) = 2005 AND MONTH(s_birthdate) > 6;
查询四科成绩都不低于70分的学生。
查询计算机成绩不等于0的学生
四、答案
查询所有学生的基本信息
SELECT * FROM students;
查询所有学生的姓名和性别
SELECT s_name, s_gender FROM students;
查询所有女生的信息
SELECT * FROM students WHERE s_gender = '女';
查询来自丛台区的学生姓名和家乡
SELECT s_name, s_hometown FROM students WHERE s_hometown = '丛台区';
查询语文成绩大于90分的学生姓名和成绩
SELECT s_name, s_chinese FROM students WHERE s_chinese > 90;
查询数学成绩在80分到90分之间的学生
SELECT s_name, s_math FROM students WHERE s_math BETWEEN 80 AND 90;
查询有特长的学生信息
SELECT * FROM students WHERE s_specialty = '是';
查询2006年出生的学生姓名和出生日期
SELECT s_name, s_birthdate FROM students WHERE YEAR(s_birthdate) = 2006;
查询英语成绩不及格(小于60分)的学生
SELECT s_name, s_english FROM students WHERE s_english < 60;
查询来自邯山区或复兴区的学生
SELECT s_name, s_hometown FROM students
WHERE s_hometown IN ('邯山区', '复兴区');
查询计算机成绩高于数学成绩的学生
SELECT s_name, s_computer, s_math
FROM students WHERE s_computer > s_math;
查询三科总分(语文+数学+英语)大于250分的学生
SELECT s_name, s_chinese + s_math + s_english as total_score
FROM students WHERE s_chinese + s_math + s_english > 2503
查询没有特长的男生
SELECT s_name, s_gender, s_specialty
FROM students WHERE s_gender = '男' AND s_specialty = '否';
查询语文和数学成绩都大于80分的学生
SELECT s_name, s_chinese, s_math
FROM students WHERE s_chinese > 80 AND s_math > 80;
查询平均分(四科平均)大于85分的学生
SELECT s_name, (s_chinese + s_math + s_english + s_computer) / 4 as avg_score
FROM students WHERE (s_chinese + s_math + s_english + s_computer) / 4 > 85;
查询来自永年区且英语成绩大于85分的女生
SELECT s_name, s_hometown, s_english
FROM students WHERE s_hometown = '永年区' AND s_english > 85 AND s_gender = '女';
查询计算机成绩比英语成绩高10分以上的学生
SELECT s_name, s_computer, s_english
FROM students WHERE s_computer - s_english > 10;
查询2005年下半年出生的学生
SELECT s_name, s_birthdate
FROM students WHERE YEAR(s_birthdate) = 2005 AND MONTH(s_birthdate) > 6;
查询四科成绩都不低于70分的学生
SELECT s_name, s_chinese, s_math, s_english, s_computer
FROM students WHERE s_chinese >= 70 AND s_math >= 70
AND s_english >= 70 AND s_computer >= 70;
查询计算机成绩不等于0的学生
SELECT * FROM students WHERE s_computer != 0;
这些练习题涵盖了:
基础SELECT查询
WHERE子句的各种条件筛选
比较运算符(>, <, =, >=, <=, BETWEEN, IN)
逻辑运算符(AND, OR)
算术运算
字符串模糊查询(LIKE)
日期函数的使用
每道题都只使用了SELECT、FROM、WHERE三个子句,适合初学者练习基础查询技能。