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

MySQL练习题50道:查询没有学全所有课程的同学的信息

背景

MySQL经典练习题及答案,常用SQL语句练习50题

题目描述

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

答案

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和每个学生所学的课程数即可。

  • 每个学生课程数
1
2
3
4
5
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
1
select count(c_id) from course
  • 将n作为第一个sql的查询条件,使用having连接。完整sql如下
1
2
3
4
5
6
7
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);