背景
题目描述
查询没有学全所有课程的同学的信息
答案
s_id | s_name | s_birth | s_sex |
---|---|---|---|
05 | 周梅 | 1991-12-01 | 女 |
06 | 吴兰 | 1992-03-01 | 女 |
07 | 郑竹 | 1989-07-01 | 女 |
08 | 王菊 | 1990-01-20 | 女 |
题目解析
这个题目咋一看比较复杂,把问题转化一下:假设总课程数是n,查询出所学课程数小于n的学生信息。这样,只需要求出n和每个学生所学的课程数即可。
- 每个学生课程数
select stu.s_id, count(sc.c_id)
from student stu
left join score sc
on stu.s_id = sc.s_id
group by stu.s_id
- 总课程数n
select count(c_id) from course
- 将n作为第一个sql的查询条件,使用
having
连接。完整sql如下
select stu.*
from student stu
left join score sc
on stu.s_id = sc.s_id
group by stu.s_id
having count(sc.c_id) <
(select count(c_id) from course);
评论区