【sql: 练习题7】查询没有学全所有课程的同学的信息
题目:查询没有学全所有课程的同学的信息
分析:没有学全? 意思是我是不是可以这样想:student_score 我以用户id 进行分组,然后拿到每个用户的课程id count < 课程 student_course 的count 总数
就算是 没有学全,于是sql来了
SELECT student.* FROM student,
(SELECT studentid, COUNT(*) AS a FROM student_score GROUP BY studentid HAVING a<(SELECT COUNT(*) FROM student_course))b
WHERE student.id = b.studentid
问题来了:这里是根据学生分数表 为基数查询的,有的学生在分数表里面一条记录都没有,没有学过任何一门课程,那么这样的群体就查不出来了
于是 要 反向思维 来写这个:我们先查询所有学过完整课程的学生,然后我们要没有学完的学生 就是 not in
SELECT student.* FROM student WHERE student.id NOT IN
(SELECT studentid FROM student_score GROUP BY studentid HAVING COUNT(courseid) = (SELECT COUNT(*) FROM student_course))
查询的结果集明显跟上面的不一样 ....