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

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

  • 14
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值