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
价格
让我们运行以下命令:
SELECT id FROM Book UNION SELECT id FROM Price;
该命令将返回以下内容
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
价格
运行以下命令
SELECT id FROM Book UNION ALL SELECT id FROM price;
它应该返回以下内容
重复项未被删除。
ORDER BY
PostgreSQL UNION 操作符可与 ORDER BY 子句一起使用来对查询结果进行排序。为此,我们将使用以下表:
价格
Price2
以下命令演示了如何将 UNION 操作符与 ORDER BY 子句一起使用:
SELECT * FROM Price UNION SELECT * FROM Price2 ORDER BY price;
该命令将返回以下内容
记录按价格列排序。该子句默认按升序排序记录。要按降序排序,请添加 DESC 子句,如下所示:
SELECT * FROM Price UNION SELECT * FROM Price2 ORDER BY price DESC;
该命令将返回以下内容
记录已按价格列的降序进行排序。
何时使用 Union,何时使用 Union all?
当您有多个具有相似结构但出于某种原因分开的表时,请使用 UNION 操作符。当您需要删除/消除重复记录时,它很有用。
当您不需要删除/消除重复记录时,请使用 UNION ALL 操作符。
使用 pgAdmin
现在,让我们看看如何使用 pgAdmin 执行所有这三个操作。
如何使用 pgAdmin 的 PostgreSQL Union
以下是使用 pgAdmin 的 PostgreSQL Union 的分步过程:
要通过 pgAdmin 完成相同的操作,请执行此操作
第 1 步) 登录
登录到您的 pgAdmin 帐户。
第 2 步) 点击数据库
- 在左侧的导航栏中,点击 Databases。
- 点击 Demo。
第 3 步) 输入查询
在查询编辑器中输入查询。
SELECT * FROM Price UNION SELECT * FROM Price2 ORDER BY price DESC;
步骤 4) 点击 Execute 按钮。
接下来,单击“执行”按钮。如下图所示。
它应该返回以下内容
Union All
步骤 1) 登录您的 pgAdmin 账户。
步骤 2)
- 在左侧导航栏中,点击“数据库”。
- 点击 Demo。
步骤 3) 在查询编辑器中输入查询
SELECT id FROM Book UNION ALL SELECT id FROM price;
步骤 4) 点击 Execute 按钮。
它应该返回以下内容
ORDER BY
UNION ALL 操作符可以与 ORDER BY 子句结合使用,以在结果集中对结果进行排序。例如:
SELECT id FROM Book UNION ALL SELECT id FROM price ORDER BY id;
该命令将返回以下内容
结果已排序。
摘要
- PostgreSQL UNION 操作符将一个或多个 SELECT 语句的结果合并到一个结果集中。
- UNION 操作符不返回重复记录。
- 要对结果进行排序,请将其与 ORDER BY 子句结合使用。
- UNION ALL 操作符将一个或多个 SELECT 语句的结果合并到一个结果集中。
- UNION ALL 操作符不删除重复项。