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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM