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

 

 

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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM