假设数据结构为
students(sid,sname)
sc(sid,cname)
1)选修了C课程的学生姓名
select distinct a.sname from students a,sc b
where a.sid=b.sid and b.cname='C';
2)只选修了伏悔链C课程的学生姓名
select s.sname from students s,
(select a.sid from
(select distinct sid from sc
where cname='C') a left join
(select distinct sid from sc
where cname<>'C') b on
a.sid=b.sid where b.sid is null) t
where s.sid=t.sid;
前者只要选修了C课前配程的学生就会被选出,不管该学生是否选修了其他课程。
后者某学生如果选修了C课程,还不一定能被选出,因为若他(她)还选修了其他课程那么还会被剔除掉。
"选修了C课程的学生"是"只选缺孙修C课程的学生"的父集,前者包含后者,或者说后者是前者的子集。