1-8 exists谓词的用法-SQL进阶教程

谓词是一种特殊的函数,返回值是真值(true 、false或者unknown)
例如,“= 、< 、> ”等比较谓词,以及between、like 、in 、is null等

在exists的子查询里, select子句的列表可以有下面这三种写法

  1. 通配符:SELECT *
  2. 常量:SELECT ‘这里的内容任意’
  3. 列名:SELECT col
    在这里插入图片描述
    全称量词∀(for All x):所有的x都满足条件P
    存在量词∃(there Exists x that):存在满足条件P的x

∀xPx = ¬∃x¬Px(所有的x都满足条件P=不存在不满足条件P的x)
∃xPx = ¬∀x¬Px(存在x满足条件P=并非所有的x都不满足条件P)

因此在SQL中,为了表达全称量化,需要将“所有的行都满足条件P”这样的命题转换成“不存在不满足条件P的行”

查询表中“不”存在的数据
在这里插入图片描述
求"没有参加某次会议的人"
思路:先假设所有人都参加了全部会议,并以此生成一个集合,然后从中减去实际参加会议的人

-- 求出缺席者的SQL语句(1):存在量化的应用
select distinct M1.meeting,M2.person
from Meetings M1
cross join Meetings M2
where not exists(
	select * from Meetings M3
	where M1.meeting=M3.meeting
	and M2.person=M3.person
);

-- 求出缺席者的SQL语句(2):使用差集运算
select M1.meeting,M2.person
from Meetings M1,Meetings M2
except
select meeting,person
from Meetings;

全称量化

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值