SQL 集合运算

SQL 中的集合运算用于对查询结果集进行操作,主要包括并集、交集和差集。常见的集合运算符有 UNIONINTERSECTEXCEPT(或 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;

此查询返回 employeescontractors 表中所有不重复的 name


2. UNION ALL

UNION ALLUNION 类似,但保留重复行。

sql 复制代码
SELECT column1, column2, ...
FROM table1
UNION ALL
SELECT column1, column2, ...
FROM table2;
sql 复制代码
SELECT name FROM employees
UNION ALL
SELECT name FROM contractors;

此查询返回 employeescontractors 表中所有的 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;

此查询返回同时存在于 employeescontractors 表中的 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


注意事项

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

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

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


示例综合

假设有两个表 AB

表 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

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

相关推荐
GIS之路11 小时前
ArcGIS Pro 添加底图的方式
前端·数据库·python·arcgis·信息可视化
alonewolf_9911 小时前
深入理解Redis线程模型:单线程神话与原子性实战
数据库·redis·缓存·分布式架构
五阿哥永琪11 小时前
MySQL面试题 事务实现全解析:Undo Log、Redo Log、锁与 MVCC 协同机制详解
数据库·mysql
txinyu的博客11 小时前
MySQL 学过但是全忘了?15min帮你快速复习
数据库·mysql
数据知道11 小时前
如何使用 httpx + SQLAlchemy 异步高效写入上亿级图片链接与MD5到 PostgreSQL
数据库·postgresql·httpx
PeterClerk11 小时前
数据挖掘方向 CCF 期刊推荐(数据库 / 数据挖掘 / 内容检索)
数据库·人工智能·深度学习·数据挖掘·计算机期刊
littlegirll11 小时前
一个KADB使用gpbackup迁移数据的脚本
数据库·数据迁移·kadb·gpbackup
alonewolf_9912 小时前
Redis Stack全面解析:从JSON存储到布隆过滤器,打造高性能Redis扩展生态
数据库·redis·json
正在走向自律20 小时前
金仓数据库KingbaseES中级语法详解与实践指南
数据库·oracle·kingbasees·金仓数据库·信创改造
Gofarlic_oms120 小时前
Windchill用户登录与模块访问失败问题排查与许可证诊断
大数据·运维·网络·数据库·人工智能