union与union all

union:在数据库运算中会过滤掉重复数据,并且合并之后的是根据行合并的,即:如果a表和b表中的数据各有五行,且有两行是重复数据,则合并之后是八行。运用场景:适合于需要进行统计的运算。

union all:进行全部合并运算。即:如果a表和b表中的数据各有五行,且有两行是重复数据,合并之后为10行。

1.对重复结果的处理:union在进行表连接后会筛选掉重复记录,union all不会;
2.对排序的处理:union会按照字段的顺序进行排序,union all只是简单地对结果进行合并;
3.效率:union all要比union快很多,所以,如果可以确认合并的两个结果集中不包含重复数据且不需要排序的话,那么就使用union all。


我们没有必要在每一个select结果集中使用order by子句来进行排序,我们可以在最后使用一条order by来对整个结果进行排序。例如:
select empno,ename from emp
union
select deptno,dname from dept
order by ename;

join:进行表关联运算,两个表要有一定的关系。即:如果a表和b表中的数据各有五行,且有两行是重复数据,根据某一列进行运算与条件过滤,假如a表有2列,b表有2列,join之后是4列。

----------------------------------
优化:尽量用union all代替union
union和union all的差异主要是前者需要将两个(或者多个)结果集合合并后再进行唯一性过滤操作,这就会涉及到排序,增加大量的CPU运算,加大资源消耗及延迟。所以当我们可以确认不可能出现重复结果集或者不在乎重复结果集的时候,尽量使用union all而不是union。

转载于:https://www.cnblogs.com/yuanfei1110111/p/10260631.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值