union 或者 union all 的作用
union 或者 union all 关键字可以将多个 select 语句的结果作为一个整体显示出来。
union 和 union all 的区别
union 会自动压缩多个结果集合中的重复结果,而 union all 则将所有的结果全部显示出来,不管是不是重复。
union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;union 在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。实际大部分应用中是不会产生重复的记录,最常见的是过程表与历史表 union。
union all:对两个结果集进行并集操作,包括重复行,不进行排序; 如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了。
使用示例
表 user
表 user1
-- union all:对两个结果集进行并集操作,包括重复行,不进行排序
SELECT id, name, age, address, remark FROM user
union all
SELECT id, name, age, address, remark from user1
union all 测试结果:
-- union:对两个结果集进行并集操作,筛选掉重复的记录,结果不包括重复行
SELECT id, name, age, address, remark FROM user
union
SELECT id, name, age, address, remark from user1
union 测试结果:
注意事项
1、两个SELECT 语句必须拥有相同数量的列,否则执行报错
SELECT id, name, age, address,remark FROM user
union
SELECT id, name, age, address from user1
测试结果:
2、每条 SELECT 语句中列的顺序必须相同
结果字段的顺序以第一个SELECT表字段顺序为准,union all / union 后面的表的数据会按照顺序依次附在后面。注意:按照字段顺序匹配,而不是按照字段名称匹配。
使用 select * 以表默认顺序查询
SELECT * FROM user
union all
SELECT * from user1
测试结果:
所以使用 union all / union 时最好直接写明具体的字段名。