PostgreSQL Union


PostgreSQL Union

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

例子中的PostgreSQL的联合指挥与PostgreSQL的工会所有使用的条款顺序。

什么是 PostgreSQL UNION 运算符?

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

PostgreSQL 联合运算符的语法

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

SELECT select_list_1  
FROM table_expresssion_1  
UNION  
SELECT select_list_2  
FROM table_expression_2

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

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

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

在下图中,我们可以了解UNION Operator的工作:

PostgreSQL Union

带有 ORDER BY 子句的 PostgreSQL UNION

正如我们在上面了解到的,UNION 运算符可以将来自初始命令输出的行放在附加命令输出的行之前、之后或之间

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

UNION运算符经常使用的数据来自未归费力相同的表结合起来。

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

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

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

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

DROP TABLE IF EXISTS top_rated_cars;

输出

执行上述命令后,我们会得到如下窗口信息:top_rated_cars\表不存在。

PostgreSQL Union

top_rated_cars\表包含各列如Car_name,launch_year列。

CREATE TABLE top_rated_cars(  
    Car_name VARCHAR NOT NULL,  
    launch_year SMALLINT  
);

输出

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

PostgreSQL Union

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

INSERT INTO   
  top_rated_cars(Car_name,launch_year)  
VALUES  
   ('Chevrolet Silveradon',2020),  
   ('Nissan Rogue',2020),  
   ('Mercedes-Benz GLB',2019);

输出

执行上述命令后,我们会得到如下消息窗口:三个值已经成功插入到top_rated_cars\表中。

PostgreSQL Union

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

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

DROP TABLE IF EXISTS most_reliable_cars;

输出

执行上述命令后,我们会得到如下窗口信息:most_reliable_cars\表不存在。

PostgreSQL Union

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

CREATE TABLE most_reliable_cars (  
    Car_name VARCHAR NOT NULL,  
    launch_year SMALLINT  
);

输出

执行上述命令时,我们将收到以下消息,其中显示most_reliable_cars\表已成功创建到Organization数据库中。

PostgreSQL Union

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

INSERT INTO   
  most_reliable_cars(Car_name,launch_year)  
VALUES  
   ('Toyota Prius Prime',2020),  
   ('Nissan Rogue',2020),  
   ('Kia Forte',2019);

输出

执行上述命令后,我们会得到如下消息窗口,显示三个值已成功插入到most_reliable_cars表中。

PostgreSQL Union

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

SELECT * FROM top_rated_cars;

输出

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

PostgreSQL Union

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

SELECT * FROM most_reliable_cars;

输出

执行上述命令后,我们将得到以下输出:

PostgreSQL Union

PostgreSQL UNION 示例

让我们看一个示例来了解PostgreSQL Union命令的工作方式。

简单的 PostgreSQL UNION 示例

UNION操作符是用来消除匹配的行。

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

SELECT * FROM top_rated_cars  
UNION  
SELECT * FROM most_reliable_cars;

输出

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

PostgreSQL Union

PostgreSQL 联合所有

UNION ALL操作者联合来自多个输出SELECT命令而不消除重复的行。

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

PostgreSQL UNION ALL 的语法

PostgreSQL UNION ALL 的语法如下:

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 table 参数用于从各种表中检索记录。
Where condition 这些是保存值必须满足的条件。

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

PostgreSQL UNION ALL 示例

在下面的示例中,我们将使用UNION ALL运算符来组合top_rated_cars\most_reliable_cars\表的输出。

SELECT * FROM top_rated_cars  
UNION ALL  
SELECT * FROM most_reliable_cars;

输出

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

PostgreSQL Union

带有 ORDER BY 子句的 PostgreSQL UNION ALL

所述的PostgreSQL UNION操作者能够用ORDER BY子句订购的命令输出使用沿。

带有 ORDER BY 子句的 PostgreSQL UNION ALL 示例

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

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

SELECT * FROM top_rated_cars  
UNION ALL  
SELECT * FROM most_reliable_cars  
ORDER BY Car_name;

输出

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

PostgreSQL Union

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

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

概述

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

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