联合查询通过UNION或UNION ALL合并多个SELECT结果集,UNION去重但性能低,UNION ALL保留重复且速度快;要求各SELECT列数相同、数据类型兼容,列名以第一个查询为准;可用于整合结构相似表的数据,如合并不同月份销售记录,并支持排序与限制输出。

在MySQL中,联合查询是通过UNION或UNION ALL操作符将多个SELECT语句的结果集合并成一个结果集。这种查询方式常用于从结构相似但数据来源不同的表中提取统一格式的数据。
UNION与UNION ALL的区别
UNION会自动去除结果集中重复的行,而UNION ALL保留所有行,包括重复项。因此,UNION ALL的执行效率通常更高,适合不需要去重的场景。
- UNION:去重合并,性能稍低
- UNION ALL:包含重复,速度快
基本语法格式
联合查询的基本结构如下:
SELECT 列1, 列2 FROM 表1 UNION [ALL] SELECT 列1, 列2 FROM 表2;
注意点:
- 每个SELECT语句中的列数必须相同
- 对应列的数据类型需要兼容
- 最终结果集的列名以第一个SELECT语句的列名为准
实际应用示例
假设有两个表:sales_january 和 sales_february,结构相同,都包含name和amount字段。
想要查询两个月份的销售记录,可以这样写:
SELECT name, amount FROM sales_january UNION ALL SELECT name, amount FROM sales_february;
如果希望去除重复的销售记录(比如同一个人在两个月金额相同),使用UNION:
SELECT name, amount FROM sales_january UNION SELECT name, amount FROM sales_february;
排序与限制结果
若要对联合后的结果进行排序,需在最后一个SELECT语句后使用ORDER BY:
SELECT name, amount FROM sales_january UNION ALL SELECT name, amount FROM sales_february ORDER BY amount DESC;
也可以结合LIMIT来获取前N条数据:
... ORDER BY amount DESC LIMIT 10;
基本上就这些。掌握UNION和UNION ALL的使用,能有效整合分散在多个表中的数据,提升查询灵活性。关键是确保各查询结构一致,避免因列不匹配导致错误。










