UNION用于合并多个SELECT查询结果并自动去重,UNION ALL保留所有行;要求各查询列数相同且数据类型兼容,结果集列名取自第一个查询,可结合ORDER BY排序,建议在无需去重时使用性能更高的UNION ALL。

在MySQL中,UNION用于合并两个或多个SELECT查询的结果集。它会自动去除重复的行,而使用UNION ALL则保留所有行(包括重复)。以下是UNION的基本语法和使用方法。
UNION基本语法
UNION操作要求每个SELECT语句的列数相同,对应列的数据类型也要兼容。基本结构如下:
SELECT 列1, 列2 FROM 表1 UNION SELECT 列1, 列2 FROM 表2;
如果希望保留重复记录,使用:
SELECT 列1, 列2 FROM 表1 UNION ALL SELECT 列1, 列2 FROM 表2;
使用场景与注意事项
UNION常用于从结构相似但数据来源不同的表中整合数据。比如统计多个部门的员工信息,或合并不同时间段的日志记录。
- 每个SELECT中的列数量必须一致
- 对应列的数据类型需要兼容(如字符串对字符串,数字对数字)
- 结果集的列名来自第一个SELECT语句
- 可以配合ORDER BY对最终结果排序,但需将每个SELECT用括号包围,并将ORDER BY放在最后
带排序的UNION示例
若要对合并后的结果进行排序:
请注意以下说明:1、本程序允许任何人免费使用。2、本程序采用PHP+MYSQL架构编写。并且经过ZEND加密,所以运行环境需要有ZEND引擎支持。3、需要售后服务的,请与本作者联系,联系方式见下方。4、本程序还可以与您的网站想整合,可以实现用户在线服务功能,可以让客户管理自己的信息,可以查询自己的订单状况。以及返点信息等相关客户利益的信息。这个功能可提高客户的向心度。安装方法:1、解压本系统,放在
(SELECT name, age FROM students WHERE age < 20) UNION (SELECT name, age FROM alumni WHERE age >= 20) ORDER BY age;
注意:当使用ORDER BY时,建议将每个子查询括起来,确保排序作用于整个结果集。
实际应用建议
使用UNION时,优先考虑是否需要去重。如果数据本身无重复或允许重复,用UNION ALL性能更高,因为它不执行去重操作。
- 大数据量下,UNION ALL比UNION快很多
- 可在子查询中使用WHERE、LIMIT等条件过滤数据
- 避免在高并发场景频繁使用复杂UNION查询,影响数据库性能
基本上就这些。掌握UNION的关键是理解其合并逻辑和去重机制,合理使用能有效整合分散的数据查询。









