在 SQL Server 中,UNION
是一种用于合并两个或多个 SELECT
语句结果集的操作符。它允许你将来自不同表或相同表但基于不同条件的查询结果合并成一个单独的结果集。使用 UNION
时,需要注意以下几点:
-
列数和数据类型:所有
SELECT
语句必须返回相同数量的列,并且相应列的数据类型必须兼容。例如,如果第一个SELECT
语句返回两列(一列是整数,另一列是字符串),那么第二个SELECT
语句也必须返回两列,且数据类型要与之匹配或兼容。 -
默认去重:
UNION
操作默认会去除结果集中的重复行。如果你希望保留所有重复行,可以使用UNION ALL
。 -
排序:如果需要对合并后的结果集进行排序,通常会在最后一个
SELECT
语句之后使用ORDER BY
子句。需要注意的是,ORDER BY
只能出现一次,并且必须位于所有SELECT
语句之后。
示例
假设有两个表 Employees
和 Contractors
,它们都有 FirstName
和 LastName
列。你可以使用 UNION
来合并这两个表中的数据:
SELECT FirstName, LastName
FROM Employees
UNION
SELECT FirstName, LastName
FROM Contractors;
这个查询将返回 Employees
和 Contractors
表中所有不同的 FirstName
和 LastName
组合。
如果你希望保留所有重复的行,可以使用 UNION ALL
:
SELECT FirstName, LastName
FROM Employees
UNION ALL
SELECT FirstName, LastName
FROM Contractors;
这个查询将返回 Employees
和 Contractors
表中所有的 FirstName
和 LastName
组合,包括重复的行。
注意事项
- 使用
UNION
时,每个SELECT
语句中的列名会自动从第一个SELECT
语句中继承。 - 如果需要对合并后的结果集进行过滤,可以在每个
SELECT
语句中使用WHERE
子句,或者在合并后的结果集上使用外部查询进行过滤。 UNION
操作可能会影响性能,特别是在处理大量数据时,因为它需要对结果集进行去重操作。如果确定结果集中不会有重复行,使用UNION ALL
可以提高性能。
希望这些信息能帮助你更好地理解 SQL Server 中的 UNION
操作符!