请教EXISTS子查询原理
学生数据库:XSCJ
学生表:XS
课程表:KC
成绩表:CJ
select *
from xs
where not exists
(select *
from kc
where not exists
(select *
from cj
where 课程号=kc.课程号 and 学号=xs.学号
)
)
该语句是选择选修了所有课程表里(表KC)的课程的学生情况。
请教该语句的查询原理是什么?(该例引用教科书的示例)
你这样写是指所有有选修课程的学生情况,而不论是选修一门还是所有的课程。
而题目的意思是指选修了所有课程的学生情况,比如课程表里有10门课,选修了这10门课,在成绩表里都有这10门课的成绩。
我的写法是这样:
select 学号,姓名
from xs
where 学号 in
(select 学号
from cj
group by 学号
having count(*)=
(select count(*)
from kc
)
)
教科书上那样写我看不懂