合并结果集(UNION [DISTINCT]/UNION ALL)

Exisi 2023-02-22 21:22:12
Categories: Tags:
  • 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 保留了重复,不会进行排序

 

 

 

来自 <https://dev.mysql.com/doc/refman/8.0/en/union.html>