1.概念
如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者union all关键字。union(或称为联合)的作用是将多个结果合并在一起显示出来。
union和union all的区别是,union会自动压缩多个结果集合中的重复结果,而union all则将所有的结果全部显示出来,不管是不是重复。
Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;
Union all:对两个结果集进行并集操作,包括重复行,不进行排序;
Intersect:对两个结果集进行交集操作,不包括重复行,同时进行默认规则的排序;
Minus:对两个结果集进行差操作,不包括重复行,同时进行默认规则的排序。
2.例子
1. union 与 union all 的区别
SQL> select * from jack where id<4 union select * from jack where id >2 and id<6;
ID NAME SCORE
---------- -------------------- ----------
1 Aaron 78
2 Bill 76
3 Cindy 89
4 Damon 90
5 Ella 73
SQL> select * from jack where id<4 union all select * from jack where id >2 and id<6;
ID NAME SCORE
---------- -------------------- ----------
1 Aaron 78
2 Bill 76
3 Cindy 89
3 Cindy 89
4 Damon 90
5 Ella 73
已选择6行。
从上面的两个查询中可以看出它们的区别之一在于对重复结果的处理。
2.指定某个字段进行排序
SQL> select * from
(
select score,id,name from jack where id>2 and id<7
union
select score,id,name from jack where id<4
union
select score,id,name from jack where id>8
)
order by id desc;
SCORE ID NAME
---------- ---------- --------------------
90 10 Jay
93 9 Ivan
61 6 Frado
73 5 Ella
90 4 Damon
89 3 Cindy
76 2 Bill
78 1 Aaron
已选择8行。
3.注意
并集时要合并的列类型必须一致,列名可以不一致,两个合并的并集的列数必须一致