UNION用于合并多个SELECT结果集,要求列数、顺序及数据类型兼容,UNION去重而UNION ALL保留重复行且性能更高;语法中各SELECT列数需相同,结果列名取自第一个查询,排序与限制通过ORDER BY和LIMIT在最后统一处理。

在MySQL中,UNION 操作用于合并两个或多个 SELECT 查询的结果集。它能够将多个查询结果垂直叠加,形成一个统一的结果表。使用时需要注意每个查询的列数、列的顺序以及对应列的数据类型必须兼容。
UNION 与 UNION ALL 的区别
UNION 会自动去除结果中的重复行,而 UNION ALL 保留所有行,包括重复项。因此,UNION ALL 执行效率更高,适合不需要去重的场景。
- UNION:去重,性能稍低
- UNION ALL:不去重,速度快
基本语法结构
使用 UNION 合并查询的基本格式如下:
SELECT 列1, 列2 FROM 表1 WHERE 条件UNION [ALL]
SELECT 列1, 列2 FROM 表2 WHERE 条件;
注意:
- 每个 SELECT 查询的列数量必须相同
- 对应列的数据类型需兼容
- 最终结果集的列名来自第一个 SELECT 语句
实际应用示例
假设我们有两个表:sales_january 和 sales_february,结构相同,都包含 id、product、amount 字段。
想查看两个月的销售汇总数据,可以这样写:
请注意以下说明:1、本程序允许任何人免费使用。2、本程序采用PHP+MYSQL架构编写。并且经过ZEND加密,所以运行环境需要有ZEND引擎支持。3、需要售后服务的,请与本作者联系,联系方式见下方。4、本程序还可以与您的网站想整合,可以实现用户在线服务功能,可以让客户管理自己的信息,可以查询自己的订单状况。以及返点信息等相关客户利益的信息。这个功能可提高客户的向心度。安装方法:1、解压本系统,放在
UNION ALL
SELECT product, amount FROM sales_february;
如果希望去除重复的销售记录(比如相同产品和金额),则使用:
SELECT product, amount FROM sales_januaryUNION
SELECT product, amount FROM sales_february;
排序与限制结果
若要对合并后的结果排序,ORDER BY 应放在最后一个 SELECT 语句之后,并且只能引用第一个查询中的列名。
SELECT product, amount FROM sales_januaryUNION ALL
SELECT product, amount FROM sales_february
ORDER BY amount DESC;
也可以结合 LIMIT 获取前N条记录:
...ORDER BY amount DESC
LIMIT 10;
基本上就这些。合理使用 UNION 能有效整合分散在多个表或条件下的数据,提升查询灵活性。注意性能影响,尤其是大数据量下避免不必要的去重操作。不复杂但容易忽略细节。









