PostgreSQL UNION 用法与实例

本文介绍了在 PostgreSQL 中如何使用 UNION 运算符合并两个结果集。

在 PostgreSQL 中, UNION 是一个集合运算符,它返回两个集合的并集,它用于合并两个结果集。

其他的集合操作运算符还有: EXCEPTINTERSECT

PostgreSQL UNION 语法

要合并两个结果集,请按照以下语法使用使用 UNION 运算符:

SELECT_statement_1
UNION [ALL]
SELECT_statement_2
[ORDER BY ...];

或者您可以同时合并多个结果集,如下:

SELECT_statement_1
UNION [ALL]
SELECT_statement_2
UNION [ALL]
SELECT_statement_3
UNION [ALL]
...
[ORDER BY ...];

这里:

  • SELECT_statement_N 都是个独立 SELECT 语句。

  • 参与 UNION 运算的所有的结果集应该具有相同的列,并且列的数据类型和顺序应该相同。

  • UNIONUNION ALL 具有不同的逻辑:

    • UNION 合并两个结果集,并删除重复的行。
    • UNION ALL 合并两个结果,保留所有的行。
  • ORDER BY 子句用于对最终结果进行排序,它是可选的。

PostgreSQL UNION 实例

在本示例中,我们将使用 generate_series() 函数用来生成结果集。

我们需要用到两个结果集,先看第一个结果集:

SELECT generate_series(1, 5);
 generate_series
-----------------
               1
               2
               3
               4
               5

再看一下第二个结果集:

SELECT generate_series(3, 6);
 generate_series
-----------------
               3
               4
               5
               6

现在,我们对两个结果集进行 UNION 运算:

SELECT generate_series(1, 5)
UNION
SELECT generate_series(3, 6)
ORDER BY generate_series;
 generate_series
-----------------
               1
               2
               3
               4
               5
               6
(6 rows)

从结果看出,UNION 运算符合并了第一个结果集和第二个结果集后删除了其中的重复的行,并返回了合并后的所有行。

如果你不想要删除重复的行,请使用 UNION ALL 运算符,如下:

SELECT generate_series(1, 5)
UNION ALL
SELECT generate_series(3, 6)
ORDER BY generate_series;
 generate_series
-----------------
               1
               2
               3
               3
               4
               4
               5
               5
               6
(9 rows)

结论

在 PostgreSQL 中, UNIONUNION ALL 用来合并两个或者结果集合并为一个结果集。不同的地方在于, UNION 会删除其中的重复的行。