SQL 集合运算

SQL 中的集合运算用于对查询结果集进行操作,主要包括并集、交集和差集。常见的集合运算符有 UNIONINTERSECT 和 EXCEPT(或 MINUS,具体取决于数据库系统)。

1. UNION

UNION 用于合并两个或多个查询结果集,并去除重复行。

SELECT column1, column2, ...
FROM table1
UNION
SELECT column1, column2, ...
FROM table2;
SELECT name FROM employees
UNION
SELECT name FROM contractors;

此查询返回 employees 和 contractors 表中所有不重复的 name 值


2. UNION ALL

UNION ALL 与 UNION 类似,但保留重复行。

SELECT column1, column2, ...
FROM table1
UNION ALL
SELECT column1, column2, ...
FROM table2;
SELECT name FROM employees
UNION ALL
SELECT name FROM contractors;

此查询返回 employees 和 contractors 表中所有的 name 值,包括重复项


3. INTERSECT

INTERSECT 返回两个查询结果集的交集,即同时出现在两个结果集中的行。

SELECT column1, column2, ...
FROM table1
INTERSECT
SELECT column1, column2, ...
FROM table2;
SELECT name FROM employees
INTERSECT
SELECT name FROM contractors;

此查询返回同时存在于 employees 和 contractors 表中的 name 值


4. EXCEPT(或 MINUS)

EXCEPT 返回第一个查询结果集中存在但第二个结果集中不存在的行。

SELECT column1, column2, ...
FROM table1
EXCEPT
SELECT column1, column2, ...
FROM table2;
SELECT name FROM employees
EXCEPT
SELECT name FROM contractors;

此查询返回在 employees 表中但不在 contractors 表中的 name 值


注意事项

  • 参与集合运算的查询结果集必须具有相同的列数和数据类型。

  • UNION 和 INTERSECT 默认去除重复行,而 UNION ALL 保留重复行。

  • EXCEPT 在某些数据库系统中可能称为 MINUS


示例综合

假设有两个表 A 和 B

表 A:

idname
1Alice
2Bob
3Carol

表 B:

idname
2Bob
3Carol
4Dave
SELECT name FROM A
UNION
SELECT name FROM B;

结果:

name
Alice
Bob
Carol
Dave
SELECT name FROM A
INTERSECT
SELECT name FROM B;

结果:

name
Bob
Carol
SELECT name FROM A
EXCEPT
SELECT name FROM B;

结果:

name
Alice

这些集合运算在数据分析和处理中非常有用,能够帮助我们从多个表中提取和比较数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值