postgresql—-ANY/SOME&&ALL详解数据库

一.ANY/SOME

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

其实ANY和SOME在这里是同等效的,子查询的结果集只能是一个字段,左边表达式使用operator对结果集的每一行进行一次比较运算,如果有一个运算结果是’TRUE’,则表达式结果为’TRUE’,如果比较结果全部是’FALSE’表达式结果才是’FALSE’。

> ANY  大于子查询结果中的某个值

< ANY  小于子查询结果中的某个值

>= ANY 大于或等于子查询结果中的某个值

<= ANY 小于或等于子查询结果中的某个值

= ANY  等于子查询结果中的某个值,相当于IN

!= ANY 不等于子查询结果中的某个值 

 

示例1.查询tbl_insert表,条件是字段a大于表tbl_test字段f某一行中的值

test=# select * from tbl_insert where a > any(select f from tbl_test); 
 a | b |   c    
---+---+------- 
 2 | 2 | 22 
 3 | 3 | 33 
 4 | 4 | 44 
 5 | 5 | 51 
 6 | 6 | 1 
 6 | 6 | 61 
 6 | 6 | 661 
 7 | 7 | 3%1 
 8 | 8 | 3%_1 
 8 | 8 | 3_%_1 
 7 | 7 | abc 
 7 | 7 | ABc 
 7 | 7 | aBC 
(13 rows)

 

二.ALL

WHERE expression operator ALL(subquery)

同样子查询中仍只能返回一个字段,与子查询结果集每一行进行比较结果全部是’TRUE’表达式结果才是’TRUE’,否则为’FALSE’。

> ALL  大于子查询结果中的所有值

< ALL  小于子查询结果中的所有值

>= ALL 大于或等于子查询结果中的所有值

<= ALL 小于或等于子查询结果中的所有值

= ALL 等于子查询结果中所有值(除非子查询的结果全部相等,所以实际上没什么意义)

!= ALL 不等于子查询结果中的任何一个值,相当于NOT IN

 

示例1.查询tbl_insert表中a最大的行

test=# select * from tbl_insert where a = (select max(a) from tbl_insert); 
 a | b |   c    
---+---+------- 
 8 | 8 | 3%_1 
 8 | 8 | 3_%_1 
(2 rows) 
 
test=# select * from tbl_insert where a >= all(select a from tbl_insert); 
 a | b |   c    
---+---+------- 
 8 | 8 | 3%_1 
 8 | 8 | 3_%_1 
(2 rows)

 

示例2.查询tbl_insert表中a最小的行

test=# select * from tbl_insert where a <= all(select a from tbl_insert); 
 a | b | c   
---+---+---- 
 1 | 1 | 11 
(1 row) 
 
test=# select * from tbl_insert where a = (select min(a) from tbl_insert); 
 a | b | c   
---+---+---- 
 1 | 1 | 11 
(1 row)

 

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/4874.html

(0)
上一篇 2021年7月16日
下一篇 2021年7月16日

相关推荐

发表回复

登录后才能评论