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)

 

posted @ 2016-06-26 16:27  alianblog  阅读(5905)  评论(0编辑  收藏  举报