SQL 中的集合运算用于对查询结果集进行操作,主要包括并集、交集和差集。常见的集合运算符有 UNION
、INTERSECT
和 EXCEPT
(或 MINUS
,具体取决于数据库系统)。
1. UNION
UNION
用于合并两个或多个查询结果集,并去除重复行。
sql
SELECT column1, column2, ...
FROM table1
UNION
SELECT column1, column2, ...
FROM table2;
sql
SELECT name FROM employees
UNION
SELECT name FROM contractors;
此查询返回 employees
和 contractors
表中所有不重复的 name
值
2. UNION ALL
UNION ALL
与 UNION
类似,但保留重复行。
sql
SELECT column1, column2, ...
FROM table1
UNION ALL
SELECT column1, column2, ...
FROM table2;
sql
SELECT name FROM employees
UNION ALL
SELECT name FROM contractors;
此查询返回 employees
和 contractors
表中所有的 name
值,包括重复项
3. INTERSECT
INTERSECT
返回两个查询结果集的交集,即同时出现在两个结果集中的行。
sql
SELECT column1, column2, ...
FROM table1
INTERSECT
SELECT column1, column2, ...
FROM table2;
sql
SELECT name FROM employees
INTERSECT
SELECT name FROM contractors;
此查询返回同时存在于 employees
和 contractors
表中的 name
值
4. EXCEPT(或 MINUS)
EXCEPT
返回第一个查询结果集中存在但第二个结果集中不存在的行。
sql
SELECT column1, column2, ...
FROM table1
EXCEPT
SELECT column1, column2, ...
FROM table2;
sql
SELECT name FROM employees
EXCEPT
SELECT name FROM contractors;
此查询返回在 employees
表中但不在 contractors
表中的 name
值
注意事项
-
参与集合运算的查询结果集必须具有相同的列数和数据类型。
-
UNION
和INTERSECT
默认去除重复行,而UNION ALL
保留重复行。 -
EXCEPT
在某些数据库系统中可能称为MINUS
。
示例综合
假设有两个表 A
和 B
:
表 A:
id | name |
---|---|
1 | Alice |
2 | Bob |
3 | Carol |
表 B:
id | name |
---|---|
2 | Bob |
3 | Carol |
4 | Dave |
sql
SELECT name FROM A
UNION
SELECT name FROM B;
结果:
name |
---|
Alice |
Bob |
Carol |
Dave |
sql
SELECT name FROM A
INTERSECT
SELECT name FROM B;
结果:
name |
---|
Bob |
Carol |
sql
SELECT name FROM A
EXCEPT
SELECT name FROM B;
结果:
name |
---|
Alice |
这些集合运算在数据分析和处理中非常有用,能够帮助我们从多个表中提取和比较数据