MySql经典语句练习50题 ---- 40 ~ 50题
目录
40、查询选修"张三"老师所授课程的学生中,成绩最高的学生信息及其成绩:
41、查询不同课程成绩相同的学生的学生编号、课程编号、学生成绩:
43、统计每门课程的学生选修人数(超过5人的课程才统计)。要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列 :
40、查询选修"张三"老师所授课程的学生中,成绩最高的学生信息及其成绩:
SELECT student.s_id, s_name, s_birth, s_sex, s_score
FROM student, teacher, score, (SELECT c_id, MAX(s_score) max
FROM score
GROUP BY c_id) AS sc
WHERE t_name = "张三" AND teacher.t_id = sc.c_id AND score.s_id = student.s_id AND score.c_id = sc.c_id AND score.s_score = max;
41、查询不同课程成绩相同的学生的学生编号、课程编号、学生成绩:
SELECT sc1.*
FROM score sc1
WHERE EXISTS (SELECT *
FROM score sc2
WHERE sc1.s_id = sc2.s_id AND sc1.c_id != sc2.c_id
AND sc1.s_score = sc2.s_score);
42、查询每门课成绩最好的前两名
SELECT c_id, s_score
FROM score sc1
WHERE (SELECT COUNT(*)
FROM score sc2
WHERE sc1.c_id = sc2.c_id AND sc1.s_score < sc2.s_score) < 2
ORDER BY sc1.c_id, sc1.s_score DESC;
43、统计每门课程的学生选修人数(超过5人的课程才统计)。要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列 :
SELECT c_id, COUNT(s_id) num
FROM score
GROUP BY c_id
HAVING COUNT(s_id) > 5
ORDER BY COUNT(s_id) DESC, c_id;
44、检索至少选修两门课程的学生学号:
SELECT s_id
FROM score
GROUP BY s_id
HAVING COUNT(c_id) >= 2;
45、查询选修了全部课程的学生信息
SELECT *
FROM student
WHERE NOT EXISTS (SELECT *
FROM course
WHERE NOT EXISTS (SELECT *
FROM score
WHERE student.s_id = score.s_id AND course.c_id = score.c_id));
46、查询各学生的年龄
SELECT *, 2023 - s_birth age
FROM student;
47、查询本周过生日的学生
SELECT *
FROM student
WHERE WEEK(s_birth) = WEEK(NOW());
48、查询下周过生日的学生
SELECT *
FROM student
WHERE WEEK(s_birth) = WEEK(NOW()) + 1;
49、查询本月过生日的学生
SELECT *
FROM student
WHERE MONTH(s_birth) = MONTH(NOW());
50、查询下月过生日的学生
SELECT *
FROM student
WHERE MONTH(s_birth) = MONTH(NOW()) + 1;