用SQL语句查询选修了c课程的学生姓名和只选修了c课程的学生姓名

两者有什么区别
2024-11-26 03:47:30
推荐回答(1个)
回答1:

假设数据结构为
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课程的学生"的父集,前者包含后者,或者说后者是前者的子集。