PostgreSQL UNION 操作符

Posted 瀚高PG实验室

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PostgreSQL UNION 操作符相关的知识,希望对你有一定的参考价值。

PostgreSQL UNION 操作符

PostgreSQL UNION 操作符合并两个或多个 SELECT 语句的结果。
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
请注意,UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。
语法
UNIONS 基础语法如下:

SELECT column1 [, column2 ]
FROM table1 [, table2 ][WHERE condition]

UNION

SELECT column1 [, column2 ]
FROM table1 [, table2 ][WHERE condition]

这里的条件语句可以根据您的需要设置任何表达式。
实例
创建 COMPANY 表,数据内容如下:

highgo=# select  * from  company ; 
 id | name | age |                       address                        | salary 
----+------+-----+------------------------------------------------------+--------
  1 | 张三 |  32 | 济南                                                 |  20000
  2 | 李四 |  25 | 青岛                                                 |  15000
  3 | 王五 |  23 | 北京                                                 |  20000
  4 | 赵六 |  25 | 上海                                                 |  65000
  5 | 小明 |  27 | 广州                                                 |  85000
  6 | 小红 |  22 | 深圳                                                 |  45000
  7 | 小强 |  24 | 成都                                                 |  10000
(7 行记录)

创建 DEPARTMENT 表,数据内容如下:

highgo=# SELECT * from DEPARTMENT;
 id |                          dept                          | emp_id 
----+--------------------------------------------------------+--------
  1 | 技术支持                                               |      1
  2 | 研发                                                   |      2
  3 | 财务                                                   |      7
  4 | 研发                                                   |      3
  5 | 财务                                                   |      4
  6 | 研发                                                   |      5
  7 | 财务                                                   |      6
(7 行记录)

现在,我们在 SELECT 语句中使用 UNION 子句将两张表连接起来,如下所示:

SELECT EMP_ID, NAME, DEPT FROM COMPANY INNER JOIN DEPARTMENT
   ON COMPANY.ID = DEPARTMENT.EMP_ID
   UNION
SELECT EMP_ID, NAME, DEPT FROM COMPANY LEFT OUTER JOIN DEPARTMENT
    ON COMPANY.ID = DEPARTMENT.EMP_ID;

得到结果如下:

 emp_id | name |                          dept                          
--------+------+--------------------------------------------------------
      1 | 张三 | 技术支持                                              
      3 | 王五 | 研发                                                
      4 | 赵六 | 财务                                                
      7 | 小强 | 财务                                                
      2 | 李四 | 研发                                                
      6 | 小红 | 财务                                                
      5 | 小明 | 研发                                                
(7 行记录)

UNION ALL 子句

UNION ALL 操作符可以连接两个有重复行的 SELECT 语句,默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。
语法
UINON ALL 子句基础语法如下:

SELECT column1 [, column2 ]
FROM table1 [, table2 ][WHERE condition]

UNION ALL

SELECT column1 [, column2 ]
FROM table1 [, table2 ][WHERE condition]

这里的条件语句可以根据您的需要设置任何表达式。
实例
现在,让我们把上面提到的两张表用 SELECT 语句结合 UNION ALL 子句连接起来:

SELECT EMP_ID, NAME, DEPT FROM COMPANY INNER JOIN DEPARTMENT
   ON COMPANY.ID = DEPARTMENT.EMP_ID
   UNION ALL
SELECT EMP_ID, NAME, DEPT FROM COMPANY LEFT OUTER JOIN DEPARTMENT
    ON COMPANY.ID = DEPARTMENT.EMP_ID;

得到结果如下:

 emp_id | name |                          dept                          
--------+------+--------------------------------------------------------
      1 | 张三 | 技术支持                                              
      2 | 李四 | 研发                                                
      7 | 小强 | 财务                                                
      3 | 王五 | 研发                                                
      4 | 赵六 | 财务                                                
      5 | 小明 | 研发                                                
      6 | 小红 | 财务                                                
      1 | 张三 | 技术支持                                              
      2 | 李四 | 研发                                                
      7 | 小强 | 财务                                                
      3 | 王五 | 研发                                                
      4 | 赵六 | 财务                                                
      5 | 小明 | 研发                                                
      6 | 小红 | 财务                                                
(14 行记录)

以上是关于PostgreSQL UNION 操作符的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQL 嵌套 CTE 和 UNION

9.PostgreSQL的Join,Union,Null

postgresql----UNION&&INTERSECT&&EXCEPT

sql 使用union,intersection或difference运算符组合查询(来自http://www.postgresql.org/docs/9.4/static/queries-union

PostgreSQL:将表值函数串行应用于一组值和 UNION ALL 结果

Python PostgreSQL 语句问题 psycopg2 cursor.execute(Table Union)