现有一个校园数据库,如图所示,其中有五张表,五张表中的字段如下,请问现如何推断出哪个学生没有选课?
1、解答思路:要推断哪个学生没有选课,那肯定涉及到学生信息和课程信息,根据数据模型学生表和成绩表相连,成绩表里有课程编号字段,所以取数逻辑在学生表和成绩表上即可。
2、下面为实现sql,可能会存疑是否需要跟课程表相连,连了也可以,但是本人认为,学生选了课,正常就应该存在成绩(即便考虑成绩为0的情况),所以只用学生表和成绩表可以实现。
--方式一:学生表里学号在成绩表里不存在的,就是没有选课的学生
select t.学号,t.学生姓名
from 学生表 t
where t.学号 not in
( select 学号 from 成绩表);
--方式二:用not exists方式
select t.学号,t.学生姓名
from 学生表 t
where not exists
( select 1 from 成绩表 t1 where t.学号=t1.学号);
根据课程表查询成绩表,查询结果再与学生表对比,没成绩的学生就没选该课程