在MySQL中,UNION ALL
操作符被用于合并两个或多个SELECT
语句的结果集,包括所有重复行。与UNION
不同,UNION ALL
不会去除结果集中的重复行。这使得UNION ALL
通常比UNION
快,因为它不需要额外的工作来检测和去除重复的行。
以下是使用UNION ALL
的基本语法:
SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;
这里有几个关键点需要注意:
UNION ALL
操作的每个SELECT
语句必须有相同数量的列,且对应列的数据类型必须兼容。这意味着第一个SELECT
语句中的第一列数据类型必须与第二个SELECT
语句中的第一列数据类型兼容,以此类推。ORDER BY
语句。请注意,ORDER BY
是应用在整个UNION ALL
操作的结果上的,而不是单独的SELECT
语句。UNION ALL
不会消耗额外资源去检查重复的数据,因此,当不需要去重的结果集时,UNION ALL
是一个更好的选择。UNION ALL
适用于多个表中有结构类似数据需要合并显示的情况,特别是当这些数据来自不同的表,但你希望将它们作为一个连续的结果集呈现时。例如,如果你有两个销售数据表,sales2019
和sales2020
,每个表都有相同的列product_id
和amount_sold
,你可以使用UNION ALL
来获取2019年和2020年的销售数据:
SELECT product_id, amount_sold FROM sales2019
UNION ALL
SELECT product_id, amount_sold FROM sales2020;
这将返回一个结果集,其中包含两个表中的所有销售记录,包括任何重复的销售数据。