Student(sno,sname,ssex,sage,clno); Course(cno,cname,credit); Class(clno,speciality,inyear,number,monitor); Grade(sno,cno,gmark);查询所有课程的选修学生人数,若没人选,则显示为0
时间: 2023-12-03 08:46:39 浏览: 114
查询数据库中所有有成绩的学生的学号和课程号
4星 · 用户满意度95%
可以使用左联接(left join)和聚合函数(count)来实现该查询:
```
SELECT Course.cname, COUNT(Grade.sno) AS student_num
FROM Course LEFT JOIN Grade ON Course.cno = Grade.cno
GROUP BY Course.cname;
```
解释一下这个查询语句:
- 首先从 Course 表中选择课程名称(cname);
- 然后使用左联接将 Course 表与 Grade 表连接,连接条件为 Course 表的课程编号(cno)等于 Grade 表的课程编号;
- 使用 COUNT 函数统计 Grade 表中每个课程编号对应的选课学生人数,即学生表中每个课程编号出现的次数;
- 最后按照课程名称(cname)进行分组,以显示每个课程的选修学生人数。
如果一个课程没有学生选修,那么在 Grade 表中就不存在该课程编号对应的记录,左联接会返回该课程的信息以及一个空的 Grade 表记录集,COUNT 函数会将空记录集排除在外并返回 0 作为选修学生人数。
阅读全文