Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;
Union All:对两个结果集进行并集操作,包括重复行,不进行排序;
Intersect:对两个结果集进行交集操作,不包括重复行,同时进行默认规则的排序;
Minus:对两个结果集进行差操作,不包括重复行,同时进行默认规则的排序。
具体讲讲Union和Union All。先来看一个例子:
有一张学生表student如下:
| id | name | score |
| 1 | Aaron | 78 |
| 2 | Bill | 76 |
| 3 | Cindy | 89 |
| 4 | Damon | 90 |
| 5 | Ella | 73 |
| 6 | Frado | 61 |
| 7 | Gill | 99 |
| 8 | Hellen | 56 |
| 9 | Ivan | 93 |
| 10 | Jay | 90 |
看看以下4段SQL语句
1)
select * from student where id<4
union
select * from student where 2<id and id<6
2)
select * from student where 2<id and id<6
union
select * from student where id<4
3)
select * from student where id<4
union all
select * from student where 2<id and id<6
4)
select * from student where 2<id and id<6
union all
select * from student where id<4
看看4段SQL语句的执行结果:
①
| id | name | score |
| 1 | Aaron | 78 |
| 2 | Bill | 76 |
| 3 | Cindy | 89 |
| 4 | Damon | 90 |
| 5 | Ella | 73 |
②
同上
③
| id | name | score |
| 1 | Aaron | 78 |
| 2 | Bill | 76 |
| 3 | Cindy | 89 |
| 3 | Cindy | 89 |
| 4 | Damon | 90 |
| 5 | Ella | 73 |
④
| id | name | score |
| 3 | Cindy | 89 |
| 4 | Damon | 90 |
| 5 | Ella | 73 |
| 1 | Aaron | 78 |
| 2 | Bill | 76 |
| 3 | Cindy | 89 |
从以上四个结果来看,可以得出结论:Union是不可重复的,有序的。Union All是可以重复的,无序的。
那么Union的自动排序的默认规则是什么呢?
众多周知,以上的select *就相当于select id, name, score。默认排序规则是按照select之后的第一个字段排序,也就是id。如果想要按照score排序,可以这样写:select score, id, name。
那么可不可以用order by排序呢,答案是:可以。不过order by一定要写到最后一个结果集里,如下面SQL语句:
select * from student where 2<id and id<6
union
select * from student where id<4
order by score
order by 排序对于Union、Union All、Intersect、Minus都有效。
本文详细解释了SQL中的Union、UnionAll、Intersect和Minus操作的区别,并通过实例展示了它们的用法和执行结果。重点阐述了Union与UnionAll的操作特性,包括排序规则和重复行处理方式,以及如何在查询中应用这些操作符。
763

被折叠的 条评论
为什么被折叠?



