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 行记录)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值