建表语句
create table students(
id int primary key auto_increment,
s_name varchar(20) not null,
s_birthdate date ,
s_gender enum('男','女') not null,
s_hometown enum('永年区', '肥乡区', '邯山区', '丛台区', '复兴区') ,
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', '男', '复兴区', NULL, NULL, 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', '女', NULL, 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, '是'),
('孙浩然', NULL, '男', '肥乡区', 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, NULL, 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, '否'),
('罗诗雨', NULL, '女', NULL, 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', '男', '复兴区', NULL, 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, '否'),
('邓雨菲', NULL, '女', '永年区', 77.00, 95.50, 85.75, 91.25, '是'),
('钟子涵', '2005-03-27', '男', '丛台区', 90.50, 81.25, 76.00, 94.75, '否'),
('袁欣悦', '2006-07-14', '女', '邯山区', 83.75, NULL, 93.25, 79.50, '否'),
('崔天佑', '2005-11-22', '男', '复兴区', 71.25, 98.50, 84.75, 86.00, '是'),
('薛佳琪', NULL, '女', NULL, 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, '是');
练习1:比较查询
查询所有女生的姓名、家乡和语文成绩
查询数学成绩大于 90 分的学生姓名
查询语文成绩在 70~90 分之间的学生
查询数学成绩比语文成绩高至少 20 分的学生
查询总分(四科之和)超过 350 分的学生
查询总分高于“丁雨萱”的学生
练习2.IN 或 NOT IN查询
查询来自"丛台区"、"邯山区"、"复兴区"这三个地区的学生信息,显示学生姓名、性别和家乡。
查询不是"肥乡区"和"永年区"的学生,且语文成绩在80分以上的学生信息。
查询有特长(s_specialty为'是')且家乡在"丛台区"或"复兴区",或者家乡为空的学生。
查询数学成绩或英语成绩在90分以上的男生,或者计算机成绩在85分以上的女生。
查询没有特长(s_specialty为'否'),且家乡不在"丛台区"和"邯山区",同时出生日期不为空的学生信息。
练习3:LIKE匹配查询
1.查询姓“张”的学生信息
2.查询名字中包含“小”字的学生
3.查询名字第二个字是“芳”的学生
4.查询姓“王”或“欧阳”的学生(模糊查询)
5.查询姓名长度为 3 个字且最后一个字是“雪”的学生
6.查询姓名中包含“小”且出生年份为偶数的学生
练习4:空值判断查询
查询计算机成绩为 NULL 的学生信息
查询没有计算机成绩的学生中,数学成绩最高的学生
查询计算机成绩为 NULL 的学生中,年龄最大的前3人。
查询外语成绩比计算机成绩高的学生(排除 computer 为 NULL)
练习5:逻辑查询
查询家乡是“丛台区”或“复兴区”且语文成绩 ≥ 80 的学生
查询年龄在 18~20 岁之间(假设当前日期为 2023-10-01)的男生
查询计算机成绩不为空且数学成绩 < 60 的学生
查询
磁县肥乡区或永年,外语和计算机成绩均 ≥ 80 的男生查询计算机成绩在 70~90 分之间的复兴区学生**
查询家乡为“丛台区”或“复兴区”,且四科成绩均 ≥ 80 分的学生
练习6:RAND()函数查询
随机选择5名学生的所有信息
随机查询3名学生的姓名和各科成绩
随机选择2名男生和2名女生(分别随机选择)
随机抽取3名有特长(s_specialty='是')的学生
随机选择4名家乡不为空的学生
随机抽取3名语文成绩在80分以上的学生
随机选择5名学生,显示姓名和随机数(0-1之间)
随机抽取2名数学成绩为空的学生
随机选择3名来自丛台区或复兴区的学生
10. 随机抽取4名2005年出生的学生
练习7:BETWEEN运算符查询
出生日期在2005年1月1日到2005年12月31日之间的学生信息(即2005年出生的学生)。
查询语文成绩在80分到90分之间的学生姓名和语文成绩。
查询数学成绩在70分到85分之间,或者英语成绩在80分到95分之间的学生。
查询计算机成绩在80分到90分之间,且出生日期在2005年9月1日到2006年8月31日之间的学生。
查询总分(语文+数学+英语+计算机)在300分到350分之间的学生信息。
练习8:FLOOR()和CEIL()函数查询
统计各科成绩的平均分,并分别使用FLOOR和CEIL取整,显示科目、平均分、向下取整和向上取整结果
将学生按数学成绩分组:0-59(不及格)、60-69(及格)、70-79(中等)、80-89(良好)、90-100(优秀),统计每组人数
计算每个学生的总分(语文+数学+英语+计算机),然后使用FLOOR将总分除以10后取整,统计每个分数段的人数
查询各科成绩,使用CEIL将成绩向上取整到最近的5的倍数(如82→85,83→85),并显示原始成绩和调整后成绩
统计每个地区的平均总分,使用FLOOR和CEIL分别显示向下取整和向上取整的结果,并按平均总分降序排列