where exists/not exists—–查询选修了全部课程的学生姓名

  • Post author:
  • Post category:其他


看课件对照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写完了好像就我能看得懂,可能过段时间我自己也看不懂我写的什么鬼了,抱歉啊



版权声明:本文为csdnnmbdybb原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。