看课件对照icourse课程网上的课程视频。
对于这题—-
查询选修了全部课程的学生姓名
——一步步分析
首先,我们的目标是要姓名 from student where(没有一门课是他没选修的)
没有一门课是他没选修的—–> 学过缩句的我们知道这句话的主语就是课,前面是 not exists;
所以 就是where not exists(
select * from course where(他没选修过)
)
他没选修过——>即不存在(not exists)他和这门课的元组(在SC表中)
所以就是where not exists(
select *from SC where
student.sno=sc.no and course.cno=sc.no)
所以合并上面的就行了。。
这里我们最重要的是学会分析问题,把问题拆解成子问题,把一个
肯定句改成双重否定句
!!!
查询至少选修了学生
201215122
选修的全部课程的学生号码。
看上面的表,我们实际上只需要SC这个表就够了。
select sno from sc sc1 where(不存在这样一门课—-学生201215122选修了 And 他没选
not exists(
select * from sc sc2 where sc2.sno=201215122 And(
他没选—–即不存在 他选了和学号为201215122相同的课
not exists (
select * from sc3 where sc1.sno=sc3.sno and sc3.cno=sc2.cno
)
)
)
)
hhhhhhhh写完了好像就我能看得懂,可能过段时间我自己也看不懂我写的什么鬼了,抱歉啊