PostgreSQL Union、Union ALL 及示例

PostgreSQL Union 是什么?

PostgreSQL UNION 操作符用于将一个或多个 SELECT 语句的结果集合并到一个结果集中。SELECT 语句的结果集中的任何重复行都将被消除。UNION 操作符在两种条件下工作:

  • SELECT 查询必须返回相似数量的查询。
  • 所有对应列的数据类型必须兼容。

UNION 操作符通常用于合并来自尚未完全规范化的相关表的数据。

语法

SELECT expression_1, expression_2, ... expression_n
FROM tables
[WHERE condition(s)]
UNION
SELECT expression_1, expression_2, ... expression_n
FROM tables
[WHERE condition(s)];

以上参数的解释如下:

expression_1, expression_2, … expression_n 是您需要检索的计算或列。

tables 是您需要从中检索记录的表。

WHERE condition(s) 是检索记录必须满足的条件。

注意:由于 UNION 操作符不返回重复项,因此使用 UNION DISTINCT 对结果没有影响。

PostgreSQL Union

UNION 操作符会删除重复项。让我们来演示一下。

我们有一个名为 Demo 的数据库,其中包含以下表:

Book

PostgreSQL Union

价格

PostgreSQL Union

让我们运行以下命令:

SELECT id
FROM Book
UNION
SELECT id
FROM Price;

该命令将返回以下内容

PostgreSQL Union

id 列同时出现在 Book 和 Price 表中。然而,它只在结果中出现一次。原因是 PostgreSQL UNION 操作符不返回重复项。

PostgreSQL Union All

此操作符将一个或多个 SELECT 语句的结果集合并,而不删除重复项。该操作符要求每个 SELECT 语句在结果集中拥有相似数量的字段,且数据类型相似。

语法

SELECT expression_1, expression_2, ... expression_n
FROM tables
[WHERE condition(s)]
UNION ALL
SELECT expression_1, expression_2, ... expression_n
FROM tables
[WHERE condition(s)];

以上参数的解释如下:

expression_1, expression_2, … expression_n 是您需要检索的计算或列。

tables 是您需要从中检索记录的表。

WHERE condition(s) 是检索记录必须满足的条件。

注意:两个表达式必须具有相同数量的表达式。

我们将使用以下表:

Book

PostgreSQL Union All

价格

PostgreSQL Union All

运行以下命令

 
SELECT id
FROM Book
UNION ALL
SELECT id
FROM price;

它应该返回以下内容

PostgreSQL Union All

重复项未被删除。

ORDER BY

PostgreSQL UNION 操作符可与 ORDER BY 子句一起使用来对查询结果进行排序。为此,我们将使用以下表:

价格

ORDER BY

Price2

ORDER BY

以下命令演示了如何将 UNION 操作符与 ORDER BY 子句一起使用:

SELECT *
FROM Price
UNION
SELECT *
FROM Price2
ORDER BY price;

该命令将返回以下内容

ORDER BY

记录按价格列排序。该子句默认按升序排序记录。要按降序排序,请添加 DESC 子句,如下所示:

SELECT *
FROM Price
UNION
SELECT *
FROM Price2
ORDER BY price DESC;

该命令将返回以下内容

ORDER BY

记录已按价格列的降序进行排序。

何时使用 Union,何时使用 Union all?

当您有多个具有相似结构但出于某种原因分开的表时,请使用 UNION 操作符。当您需要删除/消除重复记录时,它很有用。

当您不需要删除/消除重复记录时,请使用 UNION ALL 操作符。

使用 pgAdmin

现在,让我们看看如何使用 pgAdmin 执行所有这三个操作。

如何使用 pgAdmin 的 PostgreSQL Union

以下是使用 pgAdmin 的 PostgreSQL Union 的分步过程:

要通过 pgAdmin 完成相同的操作,请执行此操作

第 1 步) 登录
登录到您的 pgAdmin 帐户。

第 2 步) 点击数据库

  1. 在左侧的导航栏中,点击 Databases。
  2. 点击 Demo。

Use PostgreSQL Union Using pgAdmin

第 3 步) 输入查询
在查询编辑器中输入查询。

SELECT *
FROM Price
UNION
SELECT *
FROM Price2
ORDER BY price DESC;

步骤 4) 点击 Execute 按钮。
接下来,单击“执行”按钮。如下图所示。

Use PostgreSQL Union Using pgAdmin

它应该返回以下内容

Use PostgreSQL Union Using pgAdmin

Union All

步骤 1) 登录您的 pgAdmin 账户。

步骤 2)

  1. 在左侧导航栏中,点击“数据库”。
  2. 点击 Demo。

Use PostgreSQL Union All Using pgAdmin

步骤 3) 在查询编辑器中输入查询

SELECT id
FROM Book
UNION ALL
SELECT id
FROM price;

步骤 4) 点击 Execute 按钮。

Use PostgreSQL Union All Using pgAdmin

它应该返回以下内容

Use PostgreSQL Union All Using pgAdmin

ORDER BY

UNION ALL 操作符可以与 ORDER BY 子句结合使用,以在结果集中对结果进行排序。例如:

SELECT id
FROM Book
UNION ALL
SELECT id
FROM price
ORDER BY id;

该命令将返回以下内容

Use PostgreSQL ORDER BY Using pgAdmin

结果已排序。

摘要

  • PostgreSQL UNION 操作符将一个或多个 SELECT 语句的结果合并到一个结果集中。
  • UNION 操作符不返回重复记录。
  • 要对结果进行排序,请将其与 ORDER BY 子句结合使用。
  • UNION ALL 操作符将一个或多个 SELECT 语句的结果合并到一个结果集中。
  • UNION ALL 操作符不删除重复项。

下载本教程中使用的数据库