postgresql----IN&&EXISTS

來源:互聯網
上載者:User

標籤:使用   amp   sql   測試   查詢   比較   modifier   exp   test   

一.IN && NOT IN

WHERE expression IN (subquery)

右邊圓括弧內是返回一個欄位的子查詢結果集,左邊的運算式(或欄位)對查詢結果每一行進行一次運算和比較,如果結果集中存在相等的行,則IN結果為‘TRUE‘,否則為‘FALSE‘;

 

WHERE expression NOT IN (subquery)

NOT IN與IN正相反,如果結果集中不存在相等的行結果為‘TRUE‘,否則為‘FALSE‘。

 

測試表:

test=# \d tbl_test    Table "public.tbl_test" Column |  Type   | Modifiers --------+---------+----------- f      | integer | test=# \d tbl_insert         Table "public.tbl_insert" Column |         Type          | Modifiers --------+-----------------------+----------- a      | integer               |  b      | integer               |  c      | character varying(12) |   test=# select * from tbl_test ; f ---
 1
 3
 5(3 rows)test=# select * from tbl_insert; a | b |   c   ---+---+-------| 1 | 11| 2 | 22| 3 | 33| 4 | 44| 5 | 51| 6 | 1| 6 | 61| 6 | 661| 7 | 3%1| 8 | 3%_1| 8 | 3_%_1| 7 | abc| 7 | ABc| 7 | aBC(14 rows)

樣本1.查詢tbl_insert表,且a欄位值在tbl_test表欄位f中的行

test=# select * from tbl_insert where a in (select f from tbl_test); a | b | c  ---+---+----| 1 | 11| 3 | 33| 5 | 51(3 rows)

樣本2.查詢tbl_insert表,且a欄位值比tbl_test表欄位f小1的行

test=# select * from tbl_insert where a+1 in (select f from tbl_test); a | b | c  ---+---+----| 2 | 22| 4 | 44(2 rows)

樣本3.查詢tbl_insert表,且a欄位值不在tbl_test表欄位f中的行

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

樣本4.查詢tbl_insert表,且a欄位值等於5或7的行

test=# select * from tbl_insert where a in (5,7); a | b |  c  ---+---+-----| 5 | 51| 7 | 3%1| 7 | abc| 7 | ABc| 7 | aBC(5 rows)
二.EXISTS && NOT EXISTS

WHERE EXISTS (subquery)

括弧內同樣是一個子查詢,如果子查詢有返回結果,則EXISTS結果為‘TRUE‘,否則為‘FALSE‘。

 

WHERE NOT EXISTS(subquery)

NOT EXISTS與EXISTS正好相反,如果子查詢沒有返回結果,為‘TRUE‘,否則‘FALSE‘。

 

樣本1.查詢tbl_insert表,且a欄位值在tbl_test表欄位f中的行

test=# select * from tbl_insert where exists (select null from tbl_test where tbl_test.f=tbl_insert.a); a | b | c  ---+---+----| 1 | 11| 3 | 33| 5 | 51(3 rows)

樣本2.查詢tbl_insert表,且a欄位值不在tbl_test表欄位f中的行

test=# select * from tbl_insert where not exists (select null from tbl_test where tbl_test.f=tbl_insert.a); a | b |   c   ---+---+-------| 2 | 22| 4 | 44| 6 | 1| 6 | 61| 6 | 661| 7 | 3%1| 8 | 3%_1| 8 | 3_%_1| 7 | abc| 7 | ABc| 7 | aBC(11 rows)

PS:NOT IN的效率非常低,如果可以的話建議使用NOT EXISTS。

postgresql----IN&&EXISTS

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.