TDSQL PG支持三种集合操作:并集 (UNION [all]),差集 (EXCEPT\MINUS) 和交集 (INTERSECT)。
语法
select_statement1
{ UNION | UNION ALL | EXCEPT | MINUS | INTERSECT}
select_statement2
...
参数说明:
UNION:计算所涉及的SELECT语句所返回的行的并集,并去除重复的行。UNION ALL:计算所涉及的SELECT语句所返回的行的并集,保留重复的行。EXCEPT/MINUS:计算位于左SELECT语句的结果中但不在右SELECT语句结果中的行集合。INTERSECT:计算两个SELECT语句的结果集的交集。说明
每个select结果集的列数和数据类型必须相同。
示例
数据表
select * from test_tb1;
id | name
----+------
1 | A
2 | B
5 | E
6 | F
3 | C
4 | D
(6 rows)
select * from test_tb2;
id | name
----+------
1 | A
2 | B
8 | H
9 | I
3 | C
7 | G
(6 rows)
示例1-UNION
---返回所有行,并去除重复行
select id, name from test_tb1
union
select id, name from test_tb2;
id | name
----+------
9 | I
1 | A
2 | B
8 | H
5 | E
3 | C
6 | F
4 | D
7 | G
(9 rows)
示例2-UNION ALL
---返回所有行,并保留重复行
select id, name from test_tb1
union all
select id, name from test_tb2;
id | name
----+------
1 | A
2 | B
5 | E
6 | F
1 | A
2 | B
8 | H
9 | I
3 | C
4 | D
3 | C
7 | G
(12 rows)
示例3-EXCEPT
---返回左表中有而右表中没有的行
select id, name from test_tb1
except
select id, name from test_tb2;
id | name
----+------
4 | D
5 | E
6 | F
(3 rows)
示例4-MINUS
---返回左表中有而右表中没有的行
select id, name from test_tb1
minus
select id, name from test_tb2;
ID | NAME
----+------
4 | D
5 | E
6 | F
(3 rows)
说明
仅ORACLE兼容下支持 MINUS 语法
示例5-INTERSECT
---返回左表中有且右表中也有的行
select id, name from test_tb1
intersect
select id, name from test_tb2;
id | name
----+------
3 | C
1 | A
2 | B
(3 rows)