Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;
Union All:对两个结果集进行并集操作,包括重复行,不进行排序;
举个栗子:
两张结构相同的表,有一条记录完全相同。
先看看UNION
SELECT * FROM users
UNION
SELECT * FROM users_log;
结果:
只有一条id为3的阿杜,UNION会将重复的行给合并
再看看UNION ALL
SELECT * FROM users
UNION ALL
SELECT * FROM users_log;
结果:
有两条id为3的阿杜。
由上可知:
- UNION会将查询结果集合并,去除重复行并按照字段的顺序进行排序
- UNION ALL是直接将所有结果合并就完事儿了
从效率上说,UNION ALL 要比UNION快很多,所以,如果可以确认合并的两个结果集中不包含重复数据且不需要排序时的话,那么就使用UNION ALL。