union和union all有什么不同
2012-11-18 15:07
127 查看
假设我们有一个表Student,包括以下字段与数据:
drop table student;
create table student
(
id int primary key,
name nvarchar2(50) not null,
score number not null
);
insert into student values(1,'Aaron',78);
insert into student values(2,'Bill',76);
insert into student values(3,'Cindy',89);
insert into student values(4,'Damon',90);
insert into student values(5,'Ella',73);
insert into student values(6,'Frado',61);
insert into student values(7,'Gill',99);
insert into student values(8,'Hellen',56);
insert into student values(9,'Ivan',93);
insert into student values(10,'Jay',90);
commit;
Union和Union All的区别。
select *
from student
where id < 4
union
select *
from student
where id > 2 and id < 6
结果将是:
如果换成Union All连接两个结果集,则返回结果是:
可以看到,Union和Union
All的区别之一在于对重复结果的处理。
UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。实际大部分应用中是不会产生重复的记录,最常见的是过程表与历史表UNION。如:
select * from gc_dfys
union
select * from ls_jg_dfys
这个SQL在运行时先取出两个表的结果,再用排序空间进行排序删除重复的记录,最后返回结果集,如果表数据量大的话可能会导致用磁盘进行排序。
而UNION ALL只是简单的将两个结果合并后就返回。这样,如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了。
从效率上说,UNION ALL要比UNION快很多,所以,如果可以确认合并的两个结果集中不包含重复的数据的话,那么就使用UNION
ALL,
drop table student;
create table student
(
id int primary key,
name nvarchar2(50) not null,
score number not null
);
insert into student values(1,'Aaron',78);
insert into student values(2,'Bill',76);
insert into student values(3,'Cindy',89);
insert into student values(4,'Damon',90);
insert into student values(5,'Ella',73);
insert into student values(6,'Frado',61);
insert into student values(7,'Gill',99);
insert into student values(8,'Hellen',56);
insert into student values(9,'Ivan',93);
insert into student values(10,'Jay',90);
commit;
Union和Union All的区别。
select *
from student
where id < 4
union
select *
from student
where id > 2 and id < 6
结果将是:
id name score
1 1 Aaron 78
2 2 Bill 76
3 3 Cindy 89
4 4 Damon 90
5 5 Ella 73
如果换成Union All连接两个结果集,则返回结果是:
可以看到,Union和Union
All的区别之一在于对重复结果的处理。
UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。实际大部分应用中是不会产生重复的记录,最常见的是过程表与历史表UNION。如:
select * from gc_dfys
union
select * from ls_jg_dfys
这个SQL在运行时先取出两个表的结果,再用排序空间进行排序删除重复的记录,最后返回结果集,如果表数据量大的话可能会导致用磁盘进行排序。
而UNION ALL只是简单的将两个结果合并后就返回。这样,如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了。
从效率上说,UNION ALL要比UNION快很多,所以,如果可以确认合并的两个结果集中不包含重复的数据的话,那么就使用UNION
ALL,
相关文章推荐
- union和union all有什么不同?
- mysql union和union all有什么不同? 通常谁的效率更高?
- union和union all有什么不同?
- union 和 union all 有什么不同?
- 常用SQL查询语句 Oracle中Union,Union All,Intersect,Minus的有什么区别
- 两张结构一样的表如何找不同的记录:UNION - UNION ALL - INTERSECT - MINUS / EXCEPT
- 集合操作UNION、UNION ALL、INTERSECT、MINUS区别
- 手机开启HDR后拍照有什么不同?
- Oracle中的Union、Union All、Intersect、Minus
- 数据结构学习之 union 共用体(union 到底有什么用?)
- MySQL中UNION和UNION ALL的使用
- (旧文重贴)看看这两段代码有什么不同?
- 请问WIN32编程中的HRESULT类型和LRESULT类型有什么不同呢
- Union和Union All的区别
- CheckForIllegalCrossThreadCalls和control.Invoke有什么不同
- c++中引用和指针有什么不同?指针加上什么限制等于引用?
- varnish / squid / nginx cache 有什么不同
- SQL:union和union all的区别
- Oracle中的Union、Union All、Intersect、Minus
- 80端口与8080端口是两种不同的端口吗?他们到底有什么区别和联系?