
在使用sql语句时,我们会经常使用到union和union all两个语法,这两个的用法其实是不同的,今天我们来看看他们有什么区别
步骤一:首先手下连个关键字的区别
union: 对两个结果集进行并集操作, 不包括重复行,相当于distinct, 同时进行默认规则的排序;
union all: 对两个结果集进行并集操作, 包括重复行, 即所有的结果全部显示, 不管是不是重复;
步骤二:通过实验来看看,首先创建数据
drop table student2;
create table student2
(
id int primary key,
name varchar2(50) not null,
age number not null
);
insert into student2 values(1,'张三',23);
insert into student2 values(2,'李四',21);
insert into student2 values(3,'王二',20);
insert into student2 values(4,'郭经',20);
insert into student2 values(5,'王伟',23);
insert into student2 values(6,'Frado',24);
insert into student2 values(7,'伍梅',23);
insert into student2 values(8,'张伦',23);
insert into student2 values(9,'郭飞',21);
insert into student2 values(10,'刘鹏飞',22);
commit;
步骤三:区别1
-- union
select * from student2 where id < 4
union
select * from student2 where id > 2 and id < 6
看到结果中ID=3的只有一条
-- union all
select * from student2 where id < 4
union all
select * from student2 where id > 2 and id < 6
结果中ID=3的结果有两个union和union all的区别在于union all取结果的交集之后不会进行去重
步骤四:区别二
-- union all
select * from student2 where id > 2 and id < 6
union all
select * from student2 where id < 4
-- union
select * from student2 where id > 2 and id < 6
union
select * from student2 where id < 4
从结果中可以看到union还对获取的结果进行排序操作
步骤五:总结:union all只是合并查询结果,并不会进行去重和排序操作,在没有去重的前提下,使用union all的执行效率要比union高
