【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

扫描二维码关注公众号,回复: 6989509 查看本文章

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))

查询的结果集明显跟上面的不一样  ....

猜你喜欢

转载自www.cnblogs.com/yuanyuan2017/p/11326824.html