MySQL UNION 子句
在 MySQL 中,UNION 子句用于合并多个SELECT语句的结果集,并去除重复的行。它能够将多个查询的结果合并成一个结果集,但要求每个查询的列数和数据类型必须一致或兼容。
基本语法
SELECT column1, column2, ... FROM table1 WHERE condition UNION SELECT column1, column2, ... FROM table2 WHERE condition;
column1, column2, ...: 要选择的列。
table1, table2, ...: 要查询数据的表。
condition: 可选的 WHERE 子句,用于每个 SELECT 语句。
注意事项
每个 SELECT 语句的列数和顺序必须相同,每个相应的列的数据类型必须兼容或可隐式转换。
默认情况下,UNION 操作会自动去除重复的行,如果需要保留重复行,可以使用 UNION ALL。
UNION 操作会按照列的顺序来合并结果集,因此确保每个SELECT语句选择的列和它们的顺序是一致的是非常重要的。
使用示例:
假设有两个表 teachers 和 students,分别包含教师和学生信息。可以使用 UNION 来合并他们的姓名列:
SELECT name FROM teachers UNION SELECT name FROM students;
如果要保留重复行,可以改用UNION ALL:
SELECT name FROM teachers UNION ALL SELECT name FROM students;
限制
每个 SELECT 语句中的 ORDER BY 子句只能出现在最后一个 SELECT 语句之后,而不是每个子句都使用它。
UNION 操作可能会影响性能,尤其是在大型表或复杂查询时,因为 MySQL 可能会执行额外的排序和去重操作。
总结
UNION 子句是在 MySQL 中用于合并多个查询结果集的强大工具。它能够快速地将多个数据源的数据合并成一个结果集,并且在去除重复行或保留重复行方面提供了灵活的选项。使用时需要确保每个 SELECT 语句的列数和数据类型是一致的,以及合理评估性能影响。