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----UNION&&INTERSECT&&EXCEPT
sql 使用union,intersection或difference运算符组合查询(来自http://www.postgresql.org/docs/9.4/static/queries-union