在SQL Server中,集合运算指的是对两个或多个表(或结果集)进行操作,以产生一个新的结果集。主要的集合运算包括:
UNION
- 合并两个或多个查询的结果集,并自动去除重复的行。UNION ALL
- 与UNION
类似,但它不会去除重复的行。INTERSECT
- 返回两个查询结果集共有的行。EXCEPT
- 返回第一个查询结果集中有而第二个查询结果集中没有的行。
1 UNION
UNION
运算符将两个或多个SELECT
语句的结果集合并在一起,并自动去除重复的行。
SELECT EmployeeID, FirstName FROM Employees WHERE DepartmentID = 1 UNION SELECT EmployeeID, FirstName FROM Employees WHERE DepartmentID = 2;
这个查询会返回DepartmentID为1或2的所有员工的EmployeeID
和FirstName
,且结果中没有重复行。
2 UNION ALL
UNION ALL
与UNION
类似,但它不会去除结果集中的重复行。
SELECT column1, column2 FROM table1 WHERE condition UNION ALL SELECT column1, column2 FROM table2 WHERE condition;
3 INTERSECT
INTERSECT
运算符返回两个查询结果集共有的行。
SELECT EmployeeID, FirstName FROM Employees WHERE DepartmentID = 1 INTERSECT SELECT EmployeeID, FirstName FROM Employees WHERE Title = 'Manager';
这个查询会返回既在DepartmentID为1的部门工作,职位又是Manager的所有员工的EmployeeID
和FirstName
。
4 EXCEPT
EXCEPT
运算符返回第一个查询结果集中有而第二个查询结果集中没有的行。
SELECT EmployeeID, FirstName FROM Employees WHERE DepartmentID = 1 EXCEPT SELECT EmployeeID, FirstName FROM Employees WHERE Title = 'Manager';
这个查询会返回DepartmentID为1的部门中所有不是Manager的员工的EmployeeID
和FirstName
。
注意:
- 所有参与
UNION
、UNION ALL
、INTERSECT
和EXCEPT
运算的SELECT
语句必须具有相同数量的列。 - 对应的列必须具有兼容的数据类型,以便可以进行比较。
UNION
和EXCEPT
运算默认去除重复的行,而UNION ALL
不会去除重复的行。- 集合运算通常不适用于
INSERT
、UPDATE
或DELETE
语句。