The Usage of Combining Queries

今天学习了下 PostgreSQL 有关结果集的合并方法, 主要包括 Uinon, Intersect,Except 三种方式, 以下详细介绍。

语法

query1 UNION [ALL] query2
query1 INTERSECT [ALL] query2
query1 EXCEPT [ALL] query2

  • UNION 表示返回结果集 query1 合并成 query2 ,如果不加 ALL 参数,则去重,否则不去。
  • INTERSECT 表示返回结果集 query1 和 query2 的交集。
  • EXCEPT 表示返回结果集在 query1 中但不在 query2, 即结果集 query1 减去 query2 的集合。

创建测试表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
skytf=> /d test_41  
Table "skytf.test_41"
Column | Type | Modifiers
--------+-----------------------+-----------
id | integer |
name | character varying(32) |

skytf=> select * From test_41;
id | name
----+------
1 | a
2 | b
3 | c
(3 rows)

Union 操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
skytf=> (select * From test_41) union ( select * from test_41);  
id | name
----+------
3 | c
1 | a
2 | b
(3 rows)

skytf=> (select * From test_41 where id=1) union ( select * from test_41 where id=2);
id | name
----+------
1 | a
2 | b
(2 rows)

union all 操作

1
2
3
4
5
6
7
8
9
10
skytf=> (select * From test_41) union all ( select * from test_41);  
id | name
----+------
1 | a
2 | b
3 | c
1 | a
2 | b
3 | c
(6 rows)

Intersect 操作

1
2
3
4
5
skytf=> (select * From test_41) INTERSECT ( select * from test_41 where id=1);  
id | name
----+------
1 | a
(1 row)

Except 操作

1
2
3
4
5
6
skytf=> (select * From test_41) except ( select * from test_41 where id=1);  
id | name
----+------
3 | c
2 | b
(2 rows)

注意事项

使用 “Uinon, Intersect,Except” 操作需要 query1, query2 满足一定条件,即 query1 和 query2 返回同样的字段,并且返回的字段类型一致。

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/236407.html

(0)
上一篇 2022年1月24日
下一篇 2022年1月24日

相关推荐

发表回复

登录后才能评论