码迷,mamicode.com
首页 > 数据库 > 详细

postgresql----IN&&EXISTS

时间:2018-05-21 12:44:17      阅读:244      评论:0      收藏:0      [点我收藏+]

标签:使用   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

标签:使用   amp   sql   测试   查询   比较   modifier   exp   test   

原文地址:https://www.cnblogs.com/dancesir/p/9065929.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!