SQL汇总
- 1. SQL执行顺序
- 2. 开窗函数
- 3. 经典SQL题
-
- 3.0 数据准备
- 3.1 ☆ 查询‘01’课程比‘02’课程成绩高的学生
- 3.2 查询平均成绩大于等于60分的同学的学生编号和学生姓名和平均成绩
- 3.3 查询在SC表存在成绩的学生信息
- 3.4 查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩(没成绩的显示null)
- 3.5 查询【李】姓老师的数量
- 3.6 查询学过【张三】老师授课的同学的信息
- 3.7 查询没有学全所有课程的同学的信息
- 3.8 查询至少有一门课与学号为‘01’的同学所学相同的同学的信息
- 3.9 ☆ 查询和‘01’号同学学习的课程完全相同的其他同学的信息
- 3.10 ☆ 查询没学过【张三】老师讲授的任意门课程的学生姓名
- 3.11 查询两门及以上不合格课程的同学的学号,姓名及其平均成绩
- 3.12 检索‘01’课程分数小于60,按分数降序排列的学生信息
- 3.13 按平均成绩的高到低显示所有学生的所有课程的成绩以及平均成绩
- 3.14 ☆ 查询各科成绩最高分、最低分和平均分
- 3.15 ☆ 按各科成绩进行排序,并显示排名,Score重复时也继续排名
- 3.16 ☆ 查询学生的总成绩,并进行排名,总分重复时保留名次空缺
- 3.17 ☆ 统计各科成绩各分数段人数
- 3.18 ☆ 查询各科成绩前三名的记录
- 3.19 查询每一门课程被选修的学生数
- 3.20 查询出只选修两门课程的学生学号和姓名
- 3.21 查询男生、女生人数
- 3.22 查询名字中含有【风】字的学生信息
- 3.23 查询同名同性学生名单,并统计同名同性人数
- 3.24 查询1990年出生的学生名单
- 3.25 查询每门课程的平均成绩,结果按平均成绩降序排列,平均成绩相同时,按课程编号升序排列
- 3.26 查询平均成绩大于等于 85 的所有学生的学号、姓名和平均成绩
- 3.27 查询课程名称【数学】,且分数低于60的学生姓名和分数
- 3.28 询所有学生的课程及分数情况(存在学生没成绩,没选课的情况)
- 3.29 查询任何一门课程成绩在70分以上的姓名、课程名称和分数
- 3.30 查询存在不及格的课程
- 3.31 查询课程编号为01且课程成绩在80分以上的学生的学号和姓名
- 3.32 求每门课程的学生人数
- 3.33 ☆ 假设成绩不重复,查询选修【张三】老师所授课程的学生中,成绩最高的学生信息及其成绩
- 3.34 ☆ 假设成绩有重复的情况下,查询选修【张三】老师所授课程的学生中,成绩最高的学生信息及其成绩
- 3.35 查询不同课程成绩相同的学生的学生编号、课程编号、学生成绩
- 3.36 ☆ 查询每门科目成绩最好的前两名
- 3.37 统计每门课程的学生选修人数(超过5人的课程才统计)
- 3.38 检索至少选修两门课程的学生学号
- 3.39 查询选修了全部课程的学生信息
- 3.40 查询各学生的年龄,只按年份来算
- 3.41 ☆ 查询各学生的年龄,按出生日期来算,当前月日 < 出生年月的月日则,年龄减一
- 3.42 查询本周过生日的学生
- 3.43 查询下周过生日的学生
- 3.44 查询本月过生日的学生
- 3.45 查询下个月过生日的学生
1. SQL执行顺序
1.from
2.join
3.on
4.where
5.group by(开始使用select中的别名,后面的语句中都可以使用)
6.avg,sum
7.having
8.select
9.distinct
10.order by
11.limit
2. 开窗函数
SQL中的开窗函数介绍
(本来打算自己总结,但是发现有小伙伴总结的很好,再此引用一下)
3. 经典SQL题
3.0 数据准备
## 学生表
CREATE TABLE `student` (
`SId` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`Sname` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`Sage` datetime(0) NULL DEFAULT NULL,
`Ssex` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
INSERT INTO `student` VALUES ('01', '赵雷', '1990-01-01 00:00:00', '男');
INSERT INTO `student` VALUES ('02', '钱电', '1990-12-21 00:00:00', '男');
INSERT INTO `student` VALUES ('03', '孙风', '1990-05-20 00:00:00', '男');
INSERT INTO `student` VALUES ('04', '李云', '1990-08-06 00:00:00', '男');
INSERT INTO `student` VALUES ('05', '周梅', '1991-12-01 00:00:00', '女');
INSERT INTO `student` VALUES ('06', '吴兰', '1992-03-01 00:00:00', '女');
INSERT INTO `student` VALUES ('07', '郑竹', '1999-07-01 00:00:00', '女');
INSERT INTO `student` VALUES ('09', '张三', '2017-12-20 00:00:00', '女');
INSERT INTO `student` VALUES ('10', '李四', '2017-12-25 00:00:00', '女');
INSERT INTO `student` VALUES ('11', '李四', '2017-12-30 00:00:00', '女');
INSERT INTO `student` VALUES ('12', '赵六', '2017-01-01 00:00:00', '女');
INSERT INTO `student` VALUES ('13', '孙七', '2018-01-01 00:00:00', '女');
## 课程表
CREATE TABLE `course` (
`CID` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`Cname` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`TId` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
INSERT INTO `course` VALUES ('01', '语文', '02');
INSERT INTO `course` VALUES ('02', '数学', '01');
INSERT INTO `course` VALUES ('03', '英语', '03');
## 选课表
CREATE TABLE `sc` (
`SId` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`CID` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci