PostgreSQL Union

17 Mar 2025 | 5 分钟阅读

在本节中,我们将了解PostgreSQL UNION 运算符的工作原理,该运算符用于将各种命令的输出组合成一个单一的输出。

以及PostgreSQL union 命令示例,包括使用order by 子句的 PostgreSQL union all

什么是 PostgreSQL UNION 运算符?

PostgreSQL 中,UNION 运算符将一个或多个 SELECT 命令组合成一个单一的输出。

PostgreSQL Union 运算符的语法

PostgreSQL union 运算符的语法如下所示,它帮助我们将两个命令的输出关联起来

如果我们想借助 UNION 运算符合并两个命令的输出,那么这些命令必须遵循以下说明

  • 指定的数据类型必须兼容。
  • 这两个命令的选择列表中列的顺序和数量必须相似。

注意:UNION 运算符也用于从组合的数据集中删除所有匹配的行。我们可以使用 UNION ALL 代替 UNION 来重新收集重复的行。

在下图中,我们可以了解UNION 运算符的工作原理

PostgreSQL Union

PostgreSQL UNION 结合 ORDER BY 子句

如上所述,UNION 运算符可以将初始命令输出的行放在附加命令输出的行之前、之后或之间

我们可以在第二个命令中使用 ORDER BY 子句 对最终输出中的行进行排序。

UNION 运算符通常用于合并来自无法轻松标准化的同一表的数据。

为了理解PostgreSQL Union 运算符的工作原理,首先,我们将借助以下命令设置示例表

在下面的命令中,我们将创建两个表,如top_rated_carsmost_reliable_cars,借助 CREATE 命令并使用 INSERT 命令插入一些值。

要将 top_rated_cars 创建到 组织数据库中,我们使用 CREATE 命令。

但是,在创建 top_rated_cars 表之前,如果 组织 数据库中已经存在类似的表,我们将使用 DROP TABLE 命令

输出

执行上述命令后,我们将收到以下窗口消息:top_rated_cars 表不存在。

PostgreSQL Union

top_rated_cars 表包含各种列,例如 Car_name,launch_year 列。

输出

执行上述命令后,我们将收到以下消息:top_rated_cars 表已成功创建到 组织 数据库中。

PostgreSQL Union

成功创建 top_rated_cars 表后,我们将借助 INSERT 命令向其中输入一些值。

输出

实现上述命令后,我们将收到以下消息窗口:三个值已成功插入到 top_rated_cars 表中。

PostgreSQL Union

要将 most_reliable_cars 创建到 组织数据库中,我们使用 CREATE 命令。

但是,在创建 most_reliable_cars 表之前,如果 组织 数据库中已经存在类似的表,我们将使用 DROP TABLE 命令。

输出

执行上述命令后,我们将收到以下窗口消息:most_reliable_cars 表不存在。

PostgreSQL Union

most_reliable_cars 包含各种列,例如 Car_name,launch_year 列。

输出

执行上述命令后,我们将收到以下消息,该消息显示 most_reliable_cars 表已成功创建到 组织 数据库中。

PostgreSQL Union

成功创建 most_reliable_cars 表后,我们将借助 INSERT 命令向其中输入一些值。

输出

实现上述命令后,我们将收到以下消息窗口,该窗口显示 三个值已成功插入到 most_reliable_cars 表中。

PostgreSQL Union

如果我们要查看 top_rated_cars 表中的数据,我们在下面的命令中使用 SELECT 命令。

输出

执行上述命令后,我们将获得以下结果

PostgreSQL Union

以下语句返回 most_reliable_cars 表中的数据

输出

在实现上述命令后,我们将获得以下输出

PostgreSQL Union

PostgreSQL UNION 示例

让我们看一个示例,以了解 PostgreSQL Union 命令的工作原理。

简单 PostgreSQL UNION 的示例

UNION 运算符用于删除匹配的行。

在以下示例中,我们使用 UNION 运算符合并来自两个表的数据(top_rated_carsmost_reliable_cars)

输出

执行上述命令后,我们将获得以下输出,该输出包含 五行 在输出中,因为 UNION 运算符消除了一个匹配的行。

PostgreSQL Union

PostgreSQL UNION ALL

UNION ALL 运算符合并来自多个 SELECT 命令的输出,而不会删除重复的行。

UNION ALL 运算符涉及每个 SELECT 命令 在输出中具有相同数量的字段和相同的数据类型。

PostgreSQL UNION ALL 的语法

PostgreSQL UNION ALL 的语法如下

我们有以下参数,这些参数用于上述说明

参数说明
expression_1, expression_2, ... expression_n这些是我们希望检索的计算或列。
table 参数用于从各种表中检索记录。
Where condition这些是必须满足的条件才能保存值。

注意:在上述语法中,两个表达式都必须具有相等数量的表达式。

PostgreSQL UNION ALL 的示例

在下面的示例中,我们将使用 UNION ALL 运算符合并来自 top_rated_carsmost_reliable_cars 表的输出。

输出

执行上述命令后,我们将获得以下输出,该输出保留了匹配的行。

PostgreSQL Union

PostgreSQL UNION ALL 结合 ORDER BY 子句

PostgreSQL UNION 运算符可以与 ORDER BY 子句结合使用,以对命令输出进行排序。

PostgreSQL UNION ALL 结合 ORDER BY 子句的示例

在下面的命令中,我们使用带有 ORDER 子句的 PostgreSQL UNION ALL 对输出进行排序,该输出由 UNION 运算符返回。

我们使用 ORDER BY 子句在最后一个命令的末尾,如以下示例所示

输出

执行上述命令后,我们将获得以下结果,该结果显示来自两个表的所有数据。

PostgreSQL Union

注意:如果我们在每个命令的末尾使用 ORDER BY 子句,合并的输出将不会按我们预期的那样进行排序。

因为当 UNION 运算符合并来自所有命令的排序结果集时,它不能保证最终输出中的行顺序。

概述

在 PostgreSQL UNION 部分,我们已经学习了以下主题

  • 我们已使用 PostgreSQL UNION 和 UNION ALL 将来自各种命令的输出合并为一个输出。
  • 我们还使用了带有 ORDER By 子句的 PostgreSQL UNION ALL 来对命令输出进行排序。

下一个主题PostgreSQL Intersect