如果需要将 两个select语句的结果作为一个整体显示出来 ,我们就需要用到​ union ​或​ union all ​关键字。

union ​(或称为联合)的作用是将多个结果合并在一起显示出来。



  • union 去重且排序(取唯一值,记录没有重复)
  • union all ​不去重不排序(直接连接,取到得是所有值,记录可能有重复)

union 语法:

[SQL 语句 1]
UNION
[SQL 语句 2]

例如:


SELECT column_name(s) FROM table_name1 UNION SELECT column_name(s) FROM table_name2


union all 语法:

[SQL 语句 1]
UNION ALL
[SQL 语句 2]

例如:


SELECT column_name(s) FROM table_name1 UNION ALL SELECT column_name(s) FROM table_name2


union 和 union all 效率:


union 和 union all 关键字都是 将两个结果集合并为一个 ,但这两者从使用和效率上来说都有所不同。

从使用上说:

1、 对重复结果的处理 :union 在进行表链接后会筛选掉重复的记录,union all 不会去除重复记录;

2、​ 对排序的处理 ​:union 将会按照字段的顺序进行排序;union all 只是简单的将两个结果合并后就返回。

从效率上说:

union all 要比 union 快很多,所以,如果可以确认合并的两个结果集中不包含重复数据且不需要排序时的话,那么就使用union all。


注意:两个要联合的SQL语句字段个数必须一样,而且字段类型要“相容”(一致);


union和union all关键字需要注意:


union 和 union all都可以将多个结果集合并,而不仅仅是两个,可以将多个结果集串起来。
使用union和union all必须保证各个select 集合的结果有相同个数的列,并且每个列的类型是一样的。但列名则不一定需要相同,oracle会将第一个结果的列名作为结果集的列名。


例如:

select empno,ename from emp 
union 
select deptno,dname from dept;

我们没有必要在每一个select结果集中使用order by子句来进行排序,我们可以在最后使用一条order by来对整个结果进行排序。例如:

select empno,ename from emp 
union 
select deptno,dname from dept 
order by ename;