select Sname
from Student
where not exists
(select *
from Course
where not exists
(select *
from SC
where Sno=Student.Sno
and Cno=Course.Cno));
我的理解是:
这是一个相关子查询,由三个表查询出结果。前两个select查询的表分别是Student和Course表,最后一个是SC表。关键子查询条件在于最内层的where语句。
这是个动态的循环的查询,由最外层Student表的Sno的属性值循环实现。
那么结合起来看,如果Sno是001,那么最内层select语句就是查询的这个学生的选课表;第二层求的是这个学生没有选的课程,如果这个学生选了全部的课程那么第二层就是false的结果,再用not exists否定就是true的结果,那么返回的就是001这个学生的姓名,否则就是相反的结果,即这个学生没有选全部的课程,那么这个学生不满足件,不会被输出出来!
最后结果查询的就是选修了全部课程的学生姓名。
查询选修了全部课程的学生姓名
最新推荐文章于 2022-11-12 23:11:03 发布
