SQLserver 积累:Union和Union All的区别及用法

1.问题:一条SQL的查询结果集不能得到想要的查询结果;

2.思路:将两条SQL的结果集进行拼接,从而得到想要的查询结果;

3.工具:使用Union 或 Union All;

4.前提:两条结果集需要求有相同的列名且个数一致;

5.Union 和 Union All 的区别:

Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序; (去重且排序)

Union All:对两个结果集进行并集操作,包括重复行,不进行排序;(不去重不排序)

可以在最后一个结果集中指定Order by子句改变排序方式。

举例:两张表格,一张员工表emp,一张部门表dept,将两张表格的部门编号,合并起来.

使用:Union All

select deptno from emp
union all
select did from dept;
// 1 2 2 3 3 3 4 5

得到8个结果.

使用计数查询验证:

select count(*) from select deptno from emp
union all
select did from dept rel;
// 8

确实是8个结果.

使用:Union

select deptno from emp
union
select did from dept;
// 1 2 3 4 5

得到5个结果,因为去重了.

6.Union All 和 Union效率对比:

Union All 和 Union 关键字都是将两个结果集合并为一个,但这两者从使用和效率上来说都有所不同.

对重复结果的处理:Union在进行表链接后会筛选掉重复的记录,Union All不会去除重复记录.

对排序的处理:Union将会按照字段的顺序进行排序;Union All 只是简单的将两个结果合并后就返回.

从效率上说,Union All 要比Union快很多,所以,如果可以确认合并的两个结果集中不包含重复数据且不需要排序时的话,那么就使用Union All.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值