题目
Sql题,有一个学生信息表, stu_info_table(stu_id, name, class)
和一张学生成绩表 stu_score_table(stu_id, course_id, score)
和一张课程表 stu_course(course_id, course_name)
因为有可能存在挂科,所以在学生成绩表中,
一个学生id+一个课程id可能会有多门成绩。
请查询,选修完“语文、数学、英语”所有课程 且
没有选修除“语文、数学、英语”外其他任何课程
的学生姓名。
解法1,使用子查询和NOT EXISTS
先检查每个学生是否选修了所有三门指定的课程(语文、数学、英语),并且确保他们没有选修其他任何课程
SELECT si.name
FROM stu_info_table si
WHERE
-- 确保学生选修了所有三门课程
(SELECT COUNT(DISTINCT sc.course_id)
FROM stu_score_table sc
JOIN stu_course c ON sc.course_id = c.