在SQL中,集合运算符主要用于合并来自两个或多个SELECT语句的结果集。最常用的集合运算符包括UNION、UNION ALL、INTERSECT和EXCEPT(或MINUS,取决于数据库系统)。以下是这些运算符的基本使用方法和示例。
### UNION 和 UNION ALL
- **UNION**:用于合并两个或多个SELECT语句的结果集,并自动去除重复行。
- **UNION ALL**:与UNION类似,但会保留所有重复行。
**示例**:
-- 假设有两个表Students和Graduates,我们想要获取所有学生(包括毕业生和非毕业生)的列表,去除重复项
SELECT Name FROM Students
UNION
SELECT Name FROM Graduates;
-- 如果我们想要包含所有记录,包括重复的,可以使用UNION ALL
SELECT Name FROM Students
UNION ALL
SELECT Name FROM Graduates;
### INTERSECT
- **INTERSECT**:用于返回两个或多个SELECT语句共有的记录。
**示例**:
-- 假设我们想要找出同时出现在Students和Graduates表中的学生名字
SELECT Name FROM Students
INTERSECT
SELECT Name FROM Graduates;
### EXCEPT 或 MINUS
- **EXCEPT**(在某些数据库系统中为**MINUS**):用于返回在第一个SELECT语句中但不在后续SELECT语句中的记录。
**示例**(使用EXCEPT):
-- 假设我们想要找出在Students表中但不在Graduates表中的学生名字
SELECT Name FROM Students
EXCEPT
SELECT Name FROM Graduates;
**注意**:
- 集合运算符要求每个SELECT语句中的列数相同,且对应列的数据类型兼容。
- 集合运算符的结果集默认是不排序的,如果需要排序,可以使用ORDER BY子句。
- 某些数据库系统(如Oracle)使用MINUS而不是EXCEPT。
- 在使用集合运算符时,通常会在每个SELECT语句中包含DISTINCT关键字来确保结果的唯一性,但UNION和INTERSECT会自动去除重复,所以UNION与DISTINCT结合使用是多余的,而UNION ALL则保留所有重复项。