- UNION [DISTINCT] 操作符用于合并两个或多个 SELECT 语句的结果集,不保留重复
- UNION ALL 操作符用于合并两个或多个 SELECT 语句的结果集,保留重复结果
语法
SELECT ...
UNION [ALL | DISTINCT] SELECT ...
[UNION [ALL | DISTINCT] SELECT ...]
…;
示例
SELECT * FROM user1 WHERE id = 1
UNION
SELECT * FROM user2 WHERE name = '张三';
示例
SELECT * FROM user1 WHERE id = 1
UNION ALL
SELECT * FROM user2 WHERE name = '张三';
示例
SELECT * FROM user1 WHERE id = 1
UNION ALL
SELECT * FROM user2 WHERE name = '张三'
UNION ALL
SELECT * FROM user3 WHERE age = 20;
示例
(SELECT a FROM t1 WHERE a=10 AND B=1)
UNION
(SELECT a FROM t2 WHERE a=11 AND B=2)
ORDER BY a LIMIT 10;
注意
- UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同,UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名
- 在使用 UNION DISTINCT 的时候,由于向临时表中添加了唯一索引,插入的速度显然会因此而受到影响。如果确认进行 UNION 操作的两个集合中没有重复的选项,最有效的办法应该是使用UNION ALL
- UNION 在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果,而 UNION ALL 保留了重复,不会进行排序