首页 > 数据库技术 > 详细

【sql: 练习题7】查询没有学全所有课程的同学的信息

时间:2019-08-09 14:57:24      阅读:644      评论:0      收藏:0      [点我收藏+]

题目:查询没有学全所有课程的同学的信息

分析:没有学全? 意思是我是不是可以这样想: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))

 

技术分享图片

 

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

【sql: 练习题7】查询没有学全所有课程的同学的信息

原文:https://www.cnblogs.com/yuanyuan2017/p/11326824.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!