集合操作

最近更新时间: 2026-03-13 09:03:00

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)