postgresql----IN&&EXISTS
2024-09-08 06:36:49
一.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 | 1 | 11
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
(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 | 1 | 11
3 | 3 | 33
5 | 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 | 2 | 22
4 | 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 | 2 | 22
4 | 4 | 44
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
(11 rows)
示例4.查询tbl_insert表,且a字段值等于5或7的行
test=# select * from tbl_insert where a in (5,7);
a | b | c
---+---+-----
5 | 5 | 51
7 | 7 | 3%1
7 | 7 | abc
7 | 7 | ABc
7 | 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 | 1 | 11
3 | 3 | 33
5 | 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 | 2 | 22
4 | 4 | 44
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
(11 rows)
PS:NOT IN的效率非常低,如果可以的话建议使用NOT EXISTS。
最新文章
- 基於tiny4412的Linux內核移植--- 中斷和GPIO學習(2)
- 《连载 | 物联网框架ServerSuperIO教程》- 11.实现设备(驱动)与设备(驱动)交互和级联控制。注:设备驱动模拟金三与普京的对话
- CozyRSS开发记录16-RssContentView显示
- ZOJ 2975 思维
- fstab文件
- A题进行时--浙大PAT 1001-1010
- Punycode与中文互转
- SearchFlight_Joker
- EasyUI combox实现联动
- jQuery全屏插件Textarea Fullscreen
- js控制日期选择框datetime-local和select的展开
- LeetCode &; Q1-Two Sum-Easy
- linux 编译c程序与动态链接库
- C#基础知识之类和结构体
- GitHub for Windows离线安装包
- s*s*r备用
- shiro实战系列(三)之架构
- centos7更改网卡名
- zabbix加入TCP连接数及状态的监控
- web虎所用2个64位驱动:到底在build时要生成几个版本?
热门文章
- 第二百九十八节,python操作redis缓存-Set集合类型,可以理解为不能有重复元素的列表
- python读写word文档
- pyqt二进制和图片的转换
- 学习:List的扁平化 和 拼接
- mysql通过mysqldump工具,对某个库下的表进行备份
- 为KindEditor编辑器中的内容添加样式,使得自己定义前台页面显示效果与编辑器效果一致
- 高级类特性----抽象类(abstract class)
- 2014年王道论坛研究生机试练习赛(一) set 1 GrassLand密码
- 简单易懂的snmpd.conf配置文件说明
- LinkedBlockingQueue(lbq)阻塞队列