EXISTS谓词的用法


支持SQL的基础理论有两个:一个是数学领域的集合论,另一个是作为现代逻辑学标准体系的谓词逻辑(predicate logic),准确地说是“一阶谓词逻辑”,下面将重点介绍EXISTS谓词。

EXISTS不仅可以将多行数据作为整体来表达高级的条件,而且使用关联子查询时性能仍然非常好,这对SQL来说是不可或缺的功能

引入EXISTS这个谓词的目的是为了实现谓词逻辑中“量化”(quantification)这一强大功能


谓词到底是什么?

实际上,谓词是一种特殊的函数,返回值是真值(true、false、unknown)

谓词逻辑提供谓词是为了判断命题(可以理解为陈述句)的真假

在这里插入图片描述
在这里插入图片描述

从上面的图表中我们可以知道,EXISTS的特殊性在于输入值的阶数(输出值和其他谓词一样,都是真值)。谓词逻辑中,根据输入值的阶数对谓词进行分类。=或者BETWEEN等输入值为一行的谓词叫做“一阶谓词”,而像EXISTS这样输入值为行的集合的谓词叫做”二阶谓词“。阶(order)是用来区分集合或谓词的阶数的概念

在这里插入图片描述

-- 求出缺席者的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, Meeings M2
EXCEPT 
SELECT meeting, person
FROM meetings;

全称量化

在这里插入图片描述

-- 查询所有科目分数都在50分以上的学生
SELECT DISTINCT student_id
FROM TestScores TS1
WHERE NOT EXISTS (SELECT * 
                 FROM TestScores TS2
                 WHERE TS2.student_id = TS1.student_id
                 AND TS2.score < 50);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值