在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;

这里有几个关键点需要注意:

  1. 查询列数和类型的匹配:参与UNION ALL操作的每个SELECT语句必须有相同数量的列,且对应列的数据类型必须兼容。这意味着第一个SELECT语句中的第一列数据类型必须与第二个SELECT语句中的第一列数据类型兼容,以此类推。
  2. 排序:如果需要对整个合并后的结果集进行排序,可以在最外层添加ORDER BY语句。请注意,ORDER BY是应用在整个UNION ALL操作的结果上的,而不是单独的SELECT语句。
  3. 性能考虑UNION ALL不会消耗额外资源去检查重复的数据,因此,当不需要去重的结果集时,UNION ALL是一个更好的选择。
  4. 使用场景UNION ALL适用于多个表中有结构类似数据需要合并显示的情况,特别是当这些数据来自不同的表,但你希望将它们作为一个连续的结果集呈现时。

例如,如果你有两个销售数据表,sales2019sales2020,每个表都有相同的列product_idamount_sold,你可以使用UNION ALL来获取2019年和2020年的销售数据:

SELECT product_id, amount_sold FROM sales2019
UNION ALL
SELECT product_id, amount_sold FROM sales2020;

这将返回一个结果集,其中包含两个表中的所有销售记录,包括任何重复的销售数据。