MySQL UNION和UNION ALL的使用

在 MySQL 中,UNION 和 UNION ALL 用于合并两个或多个 SELECT 语句的结果集。它们之间的区别在于 UNION 会自动去重,而 UNION ALL 不会去重。

以下是 UNION 的语法:

SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;

以下是 UNION ALL 的语法:

SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;

示例:

假设我们有两张表,一张是 students,包含学生的学号和姓名;另一张是 teachers,包含老师的工号和姓名。我们可以使用 UNION 操作将它们的姓名合并在一起,同时去重:

SELECT name FROM students
UNION
SELECT name FROM teachers;

如果使用 UNION ALL 操作,则不会去重:

SELECT name FROM students
UNION ALL
SELECT name FROM teachers;

注意事项如下:

1、UNION和UNION ALL的区别:
UNION会自动去重,即将结果集中的重复行只保留一行。
UNION ALL不会去重,即结果集中的所有行都会保留。

2、UNION和UNION ALL的使用场景:
当需要去重时,使用UNION。
当不需要去重时,使用UNION ALL,这样可以避免去重操作对查询性能的影响。

3、UNION和UNION ALL的限制:
UNION和UNION ALL语句必须包含相同的列数,且相应的列数据类型必须兼容。
列名可以不同,但建议为结果集指定别名,以便在应用程序中更好地处理结果集。
UNION和UNION ALL只能组合SELECT语句,不能组合其他类型的SQL语句,如INSERT、UPDATE、DELETE等。
UNION和UNION ALL只能组合来自同一数据库的表,不能组合来自不同数据库的表。