SQL NOT EXISTS 的理解

目标代码:
SELECT SN
FROM S
WHERE (NOT EXISTS ( SELECT *
FROM C
WHERE NOT EXISTS(SELECT *
FROM SC
WHERE SNO=S.SNO AND CNO=C.CNO)))

相关子查询的执行顺序:首先查询父查询表中的第一行记录,内部的子查询利用此行中相关属性值进行查询,然后父查询根据子查询返回的结果判断此行是否满足查询条件。如果满足条件,则将该行放入父查询的查询结果集合中。重复执行这一过程,直到处理完父查询表的每一行数据。

Exists和NOT Exists
Exists表示存在的量词,带有Exists的子查询不返回任何实际数据,他只得到逻辑值“真”和“假”。当子查询的查询结果为非空时,外层的where子句返回真值,否则返回假值。Not Exists与此相反。

目标代码解析(个人理解)
可以将该段代码理解为两层for的嵌套循环,首先父查讯一次然后再去进行where中的第一个Not Exists 中的select当他执行完一次后,就将第二个中的Not Exists的select 中的表中内容根据要求返回是否真和假,判断这一条记录是否要保存,然后继续。(该段代码是用于查询选修所有课程的学生的姓名

for(;;s
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值