1. union 和 union all的区别
参考来源:
SQL语句中:UNION与UNION ALL的区别
数据库中UNION和UNION ALL的区别以及并集怎么取得
关于Union和Union All的区别以及用法
先说说这两个用法的要求:
必须选择相同数量的列,每条select语句中的列的顺序也必须相同,这些列也必须拥有相似的数据类型。
也就是说,要达到六耳猕猴和通背猿猴的那种匹配度才能union (all),这是前提。
这两个关键字都是将两个结果集合并成一个
union 是在进行表链接后,筛选掉完全相同的记录,union all不会去重,记录可能有重复;
union 会按照select 字段的顺序进行排序(默认),union all 只是简单的将两个结果集合并就返回,并不排序;
所以效率上来说,union all 要比union 快很多,在确认合并的两个结果集总不包含重复数据且不需要排序的话,使用union all;
另外,
这两个操作中,select的列名不一定要一样,如果要对进行排序,不需要在每一个select结果集中排序,只需要在最后一条语句中使用order by 进行排序即可。
select pname,ename from emp
union
select username,dname from dept
order by ename;
简要回答:
UNION去重且排序
UNION ALL不去重不排序
来个栗子
现在有两张表:
1.union 测试可以看到这里面有两个令狐冲,不是说会去重的嘛?!
大家看清楚了,这段SQL中含有的字段包括了课程名字和老师名字,虽然令狐冲只有一个,但是这两个字段都不一样,所以不是重复的记录,所以这也就是我上面说,完全相同
那就来个去重的栗子尝一下
这些应该学乖了吧,select中只有前两个字段,这样令狐冲记录就是重复的,所以只显示一条记录!
所以,如果要使用union,要想想自己只是想看看有哪些学生,还是要看所有信息,在select字段中选择。
2.union all测试
不好意思哈,参考来源中没做,我也懒得自己建表去测了哈哈哈~~
不过可以想到,不管选哪几个字段,都会有两个令狐冲的记录的。