一个sql语句使用两个not exists的道理
JS 2011-04-09 10:17:28 学生表(学号,名字)student(sno,sname)
选课表(学号,课程号)sc(sno,cno)
课程表(课程号,课程名)course(cno,cname)
注:不是每个学生都会选课
查询选修了全部课程的学生姓名
select sname
from student
where not exists
(select *
from course
where not exists
(select *
from sc
where sno=student.sno
and cno=course.cno))
我知道这句是把题目改写成“不存在一门课程这个学生没有选修”,但是它的原理我不是很清楚,查了很久,还是没有找到满意的答案,所以来这里请高人帮忙!
请您解释一下它的执行过程和使用逻辑以及它的效率
小弟在线等高人帮忙解答!万分感谢!高分献上好心人!