查询选修了“sqlserver”课的学生的学号、姓名和成绩
假设数据结构为
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课程的学生"的父集,前者包含后者,或者说后者是前者的子集。
已知学生选课数据库模式
选贺镇配修了2号课程的学生的姓名
SELECT Sname
FROM Student , SC
WHERE Student.Sno = SC.Sno AND Cno = 2
计算机系又不及格课程的学生名单
SELECT Sname
FROM Student , SC
WHERE Student.Sno = SC.Sno AND Sdept = '计算机' AND Score < 60
学生张林的“数据旅陆库原理”成绩
SELECT Score
FROM Student , SC , Course
WHERE Student.Sno = SC.Sno AND SC.Cno = Course.Cno AND Sname = '禅指张林'