Oracle中Union与UnionAll的区别(适用多个数据库)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Oracle中Union与UnionAll的区别(适⽤多个数据库)Union 与 Union ALL 的作⽤都是合并 SELECT 的查询结果集,那么它们有什么不同呢?
Union 将查询到的结果集合并后进⾏重查,将其中相同的⾏去除。

缺点:效率低;
⽽Union ALL 则只是合并查询的结果集,并不重新查询,效率⾼,但是可能会出现冗余数据。

我们举个例⼦来说明⼀下:
⽐如数据库中有两张表 tab1 和 tab2。

tab1 中的数据有:
⼩王
⼩张
tab2 中的数据有:
⼩王
⼩李
执⾏查询:
复制代码代码如下:
SELECT * FROM tab1 UNION SELECT * FROM tab2
结果如下:
⼩王
⼩张
⼩李
如果执⾏如下查询:
复制代码代码如下:
SELECT * FROM tab1 UNION ALL SELECT * FROM tab2
则结果如下:
⼩王
⼩张
⼩王
⼩李
这回看出来有什么不同了吧?
union和union all的区别是,union会⾃动压缩多个结果集合中的重复结果,⽽union all则将所有的结果全部显⽰出来,不管是不是重复。

Union:对两个结果集进⾏并集操作,不包括重复⾏,同时进⾏默认规则的排序;
Union All:对两个结果集进⾏并集操作,包括重复⾏,不进⾏排序;
Intersect:对两个结果集进⾏交集操作,不包括重复⾏,同时进⾏默认规则的排序;
Minus:对两个结果集进⾏差操作,不包括重复⾏,同时进⾏默认规则的排序。

可以在最后⼀个结果集中指定Order by⼦句改变排序⽅式。

例如:
复制代码代码如下:
select employee_id,job_id from employees
union
select employee_id,job_id from job_history
以上将两个表的结果联合在⼀起。

这两个例⼦会将两个select语句的结果中的重复值进⾏压缩,也就是结果的数据并不是两条结果的条数的和。

如果希望即使重复的结果显⽰出来可以使⽤union all,例如:
2.在oracle的scott⽤户中有表emp
复制代码代码如下:
select * from emp where deptno >= 20
union all
select * from emp where deptno <= 30
这⾥的结果就有很多重复值了。

有关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;。

相关文档
最新文档