pgsql学习笔记: 子查询表达式

1. EXISTS

EXISTS (subquery)

EXISTS的参数是一个任意的SELECT语句, 或者说子查询。
系统对子查询进行运算以判断它是否返回行。
如果它至少返回一行,那么EXISTS的结果就为“真”;
如果子查询没有返回行,那么EXISTS的结果是“假”。

子查询可以引用来自周围的查询的变量,这些变量在该子查询的任何一次计算中都起常量的作用。

这个子查询通常只是运行到能判断它是否可以返回至少一行为止, 而不是等到全部结束

下面这个简单的例子类似在col2上的一次内联接,但是它为每个 tab1的行生成最多一个输出,即使存在多个匹配tab2的行也如此∶

SELECT col1
FROM tab1
WHERE EXISTS (SELECT 1 FROM tab2 WHERE col2 = tab1.col2);

2. IN

expression IN (subquery)

右手边是一个圆括弧括起来的子查询, 它必须正好只返回一个列。
左手边表达式将被计算并与子查询结果逐行进行比较。
如果找到任何等于子查询行的情况,那么IN的结果就是“真”。
如果没有找到相等行,那么结果是“假”(包括子查询没有返回任何行的情况)。

请注意如果左手边表达式得到空值,或者没有相等的右手边值, 并且至少有一个右手边行得到空值,那么IN结构的结果将是空值,而不是假。

3. NOT IN

expression NOT IN (subquery)

右手边是一个用圆括弧包围的子查询,它必须返回正好一个列。
左手边表达式将被计算并与子查询结果逐行进行比较。
如果只找到不相等的子查询行(包括子查询不返回行的情况),那么NOT IN的结果是“真”。 如果找到任何相等行,则结果为“假”。

4. ANY/SOME

expression operator ANY (subquery)
expression operator SOME (subquery)

这种形式的右手边是一个圆括弧括起来的子查询, 它必须返回正好一个列。
左手边表达式将被计算并使用给出的 操作符对子查询结果逐行进行比较。
如果获得任何真值结果,那么ANY的结果就是“真”。
如果没有找到真值结果,那么结果是“假”(包括子查询没有返回任何行的情况)。
SOME是ANY的同义词。IN等价于= ANY。

5. ALL

expression operator ALL (subquery)

ALL 的这种形式的右手边是一个圆括弧括起来的子查询, 它必须只返回一列。
左手边表达式将被计算并使用给出的 操作符对子查询结果逐行进行比较。
该操作符必须生成布尔结果。
如果所有行得到真(包括子查询没有返回任何行的情况),ALL的结果就是“真”。
如果没有存在任何假值结果,那么结果是“假”。
如果比较为任何行都不返回假并且对至少一行返回 NULL,则结果为 NULL。
NOT IN等价于<> ALL。

6、 单一行比较

row_constructor operator (subquery)

左手边是一个行构造器。
右手边是一个圆括弧括起来的子查询,
该查询必须返回和左手边行中表达式数目完全一样的列。
另外,该子查询不能返回超过一行的数量(如果它返回零行,那么结果就是空值)。
左手边被计算并逐行与右手边的子查询结果行比较。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值