UNION
是 SQL 中用于合并两个或多个 SELECT
语句结果集的操作符。这些 SELECT
语句必须选择相同数量的列,并且这些列的数据类型必须兼容。UNION
会自动去除结果集中的重复行,而如果你想要保留重复行,可以使用 UNION ALL
。
UNION
的基本语法:制代码
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
几点需要注意:
-
列的数量和类型:两个
SELECT
语句中选择的列的数量必须相同,并且相应的列必须具有相似的数据类型。 -
去除重复:默认情况下,
UNION
会去除结果集中的重复行。如果你想要包含重复行,可以使用UNION ALL
。 -
排序:如果你想对结果集进行排序,你应该在
UNION
操作的外部使用一个ORDER BY
子句。
示例
假设有两个表,employees1
和 employees2
,它们都有 id
和 name
列。
employees1 表
id | name |
---|---|
1 | Alice |
2 | Bob |
3 | Carol |
employees2 表
id | name |
---|---|
3 | Carol |
4 | Dave |
5 | Eve |
如果想从这两个表中获取所有唯一的员工(不重复),你可以使用以下查询:ql
SELECT id, name FROM employees1
UNION
SELECT id, name FROM employees2;
这将返回:
id | name |
---|---|
1 | Alice |
2 | Bob |
3 | Carol |
4 | Dave |
5 | Eve |
注意 "Carol" 只出现了一次,因为 UNION
去除了重复的行。
如果你想要包含重复的行,可以使用 UNION ALL
:sql
SELECT id, name FROM employees1
UNION ALL
SELECT id, name FROM employees2;
这将返回:
id | name |
---|---|
1 | Alice |
2 | Bob |
3 | Carol |
3 | Carol |
4 | Dave |
5 | Eve |
注意 "Carol" 出现了两次。
使用 UNION
的注意事项:
-
列的数据类型:确保每个
SELECT
语句中选择的列的数据类型是相似的,以便能够合并它们的结果。如果数据类型不匹配,可能需要进行类型转换。 -
列的顺序:每个
SELECT
语句中列的顺序必须相同,以便能够正确地对齐和合并它们。 -
性能:使用
UNION
可能会比单独执行每个查询并手动合并结果更慢,因为数据库需要执行额外的步骤来合并和去除重复的行。如果表很大并且有很多重复的行,考虑使用UNION ALL
并在应用程序级别处理重复。 -
索引和视图:不能直接在
UNION
或UNION ALL
的结果上创建索引,但可以将结果存储在一个临时表或表变量中,然后在该表上创建索引。同样,不能直接在UNION
或UNION ALL
的结果上创建视图,但可以创建一个包含UNION
或UNION ALL
查询的视图。 -
NULL 值:在
UNION
的结果中,NULL
值被视为相等,并且只会出现一次。如果想要保留NULL
值的重复出现,需要使用UNION ALL
。 -
别名:如果想要给
UNION
或UNION ALL
的结果集中的列指定别名,需要在整个查询的最后使用AS
关键字来指定别名。
示例:使用别名和排序
SELECT id AS employee_id, name AS employee_name FROM employees1
UNION ALL
SELECT id, name FROM employees2
ORDER BY employee_name;
在这个示例中,我们给 id
和 name
列分别指定了别名 employee_id
和 employee_name
,并按 employee_name
对结果进行排序。注意,别名只在 ORDER BY
子句和结果集中有效,它们不会改变表或列的实际名称。
标签:name,--,union,SQL,employee,UNION,id,SELECT,重复 From: https://blog.csdn.net/m0_58552717/article/details/139469293