面向集合的思维编写SQL(7-量化万物的谓词-Exists)(上)

1.什么是谓词

何为SQL中的谓词,我们常见的比较(=,<,>)、between、like、in、is null、exist等都是谓词;

我们可以将它看作一种特殊的函数,函数的返回值都是三值逻辑(true、false、unknow),用来判断“命题”的真假;

而这些谓词常用在where子句中,我们可以视其为多个谓词的组合,从“命题”的集合中(表),找出真命题(真值)。

 

2.谓词的分类

我们按照输入内容进行分类:

输入一行:

image.png

输入集合:

image.png

这里我们按照输入内容,进行划分:

“一阶谓词”:输入一行,即exists之外的谓词;

“二阶谓词”:输入集合,exists;

“三阶谓词”:输入集合的集合,SQL暂无;

以此类推,“四阶集合”:输入集合的集合的集合,SQL暂无...

这里可以参考一下java中高阶函数的定义:不以一般原子性的值为参数,而以函数为参数的函数;

 

3.高阶谓词exists的"量化功力"

exists作为SQL目前最高阶的谓词,那么它有什么独到之处呢?

它将多行数据作为一个整体来表达更为高级的条件,这种使用常在关联子查询中,且这种关联子查询的性能也是很好的,这也就是它的的量化功能。

 

4.exists的实例操作(一)找出没有满勤的人

如下表,记录了学生们上课的考勤记录,到期末开始排查缺勤的学生。

image.png

SQL实现:

首先使用笛卡尔积计算出每节课每个学生都不缺勤的记录,然后计算出真实的出勤记录,用not exists进行量化操作。

image.png

结果如下:

image.png

 

4.exists的实例操作(二)找出数学>80、语文>70、英语>60的所有学生

用exists必须明白,肯定 = 双重否定

如下表所示,记录了学生每门科目的分数,我们要找出数学>80并且语文>70并且英语>60的学生,评为三好学生...

image.png

SQL实现:

image.png

结果如下:

image.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

OMax

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值