union和union all的区别
2012-07-20       个评论
我要投稿

www.2cto.com
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);
www.2cto.com
commit;

Union和Union All的区别。
select *
from student
where id < 4

union

select *
from student
where id > 2 and id < 6

1    Aaron    78
2    Bill    76
3    Cindy    89
4    Damon    90
5    Ella    73

1    Aaron    78
2    Bill    76
3    Cindy    89
3    Cindy    89
4    Damon    90
5    Ella    73

--Union

select *
from student
where id > 2 and id < 6

union

select *
from student
where id < 4
www.2cto.com

--Union All

select *
from student
where id > 2 and id < 6

union all

select *
from student
where id < 4
www.2cto.com

select score,id,name
from student
where id > 2 and id < 6

union

select score,id,name
from student
where id < 4
www.2cto.com

73    5    Ella
76    2    Bill
78    1    Aaron
89    3    Cindy
90    4    Damon

www.2cto.com
select score,id,name
from student
where id > 2

union

select score,id,name
from student
where id < 4

56    8    Hellen
73    5    Ella
76    2    Bill
78    1    Aaron
89    3    Cindy
90    4    Damon
90    10    Jay
93    9    Ivan
99    7    Gill
www.2cto.com

select score,id,name
from student
where id > 2 and id < 7

union

select score,id,name
from student
where id < 4

union
www.2cto.com
select score,id,name
from student
where id > 8
order by id desc

order by子句必须写在最后一个结果集里，排序时，必须使用第一个查询语句中的字段名、字段序号,并且其排序规则将改变操作后的排序结果.

(1) UNION中的所有选择列表必须具有相同列数、相似数据类型和相同的顺序   出现。

(2) 列名来自第一个SELECT语句。

(3) 若UNION中包含ORDER BY子句，则将对整个结果集排序。

(4) 在合并结果时，将从结果集中删除重复行。若使用ALL，结果集中包含所有    的行。
www.2cto.com

=================================================================================================================
Intersect和Minus的操作和Union基本一致，这里一起总结一下：

Union，对两个结果集进行并集操作，不包括重复行，同时进行默认规则的排序；

Union All，对两个结果集进行并集操作，包括重复行，不进行排序；

Intersect，对两个结果集进行交集操作，不包括重复行，同时进行默认规则的排序；

Minus，对两个结果集进行差操作，不包括重复行，同时进行默认规则的排序。

www.2cto.com
intersect运算:返回查询结果中相同的部分
exp:各个部门中有哪些相同的工种?
select job from 部门1
intersect
select job from 部门2
intersect
select job from 部门3;
www.2cto.com
oracle:minus运算： 返回在第一个查询结果中与第二个查询结果不相同的那部分行记录。

exp:select job from 部门1
minus
select job from 部门2;

sqlserver中则是:except