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。

猜你喜欢

转载自www.cnblogs.com/yuanfei1110111/p/10260631.html