Oracle中Union与UnionAll的区别(适用多个数据库)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;。