数据库六种关系运算具体包括哪些?
- 内容介绍
- 文章标签
- 相关推荐
你可能遇到的痛点
在学习或实际项目中。常见的困惑包括:
- ① 记不清六种关系运算到底是哪几项,容易把集合运算和关系代数运算混为一谈。其实,
- ② 不知道每种运算适用的场景。导致 SQL 查询写得冗长或性能低下。其实,
- ③ 对「除」运算感到陌生。往往忽略它在“找出满足全部条件的元组”时的威力。
- ④ 在多表关联时不清楚是用普通连接还是自然连接、外连接,从而出现错误结果或重复数据。
数据库中的六种主要关系运算
1️⃣ 选择
从一个关系 R 中挑选出满足指定条件的元组。SQL 对应:SELECT * FROM R WHERE 条件;
2️⃣ 投影
从关系 R 中选取若干属性列。去掉其余列,生成只包含所需属性的新关系。SQL 对应:SELECT 列1,列2 FROM R;
3️⃣ 笛卡尔积
将两个关系 R 与 S 的每一条元组两两组合,形成新的关系。SQL 对应:CROSS JOIN。
4️⃣ 连接
在笛卡尔积的基础上,根据指定的连接条件保留满足条件的元组组合。
-
等值连接 / 内连接:
SELECT …FROM R INNER JOIN S ON R.key = S.key; - 自然连接:自动基于同名属性进行等值匹配。不过,
- 外连接:保留左/右/全表中不匹配的元组。
5️⃣ 并 & 交 & 差
这三类集合运算是关系代数中的基本操作,需要参与运算的两个关系具有相同的属性集。
-
并 :
R ∪ S再看SQL,SELECT * FROM R UNION SELECT * FROM S; -
交 :
R ∩ SSQL这方面,SELECT * FROM R INTERSECT SELECT * FROM S; -
差 :
R – S说到SQL,SELECT * FROM R EXCEPT SELECT * FROM S;
6️⃣ 除
A ÷ B 返回在 A 中能够与 B 的每一个元组配对成功的 A 的投影属性值集合。典型场景是“找出选修了所有课程的学生”。SQL 实现通常借助分组和计数:
SELECT A.student_id
FROM enrollment AS A
GROUP BY A.student_id
HING COUNT = FROM courses);
快速对照表 📋
| 运算名称 | 作用描述 | 常见 SQL 实现方式 |
|---|---|---|
| Select | 行过滤——满足条件的元组子集 | S E L E C T …WHERE , |
| Projection | S E L E C T col1,col2 …怎么说呢, | |
| Cartesian Product | CROSS JOIN | |
| Link/Join | {INNER|LEFT|RIGHT|FULL} JOIN …ON , | |
| Union / Intersection / Difference | 要求结构相同;说起来,分别对应 UNION、INTERSECT、EXCEPT。 | |
| Division | - 通过 GROUP BY + HING 实现 - | |
你可能遇到的痛点
在学习或实际项目中。常见的困惑包括:
- ① 记不清六种关系运算到底是哪几项,容易把集合运算和关系代数运算混为一谈。其实,
- ② 不知道每种运算适用的场景。导致 SQL 查询写得冗长或性能低下。其实,
- ③ 对「除」运算感到陌生。往往忽略它在“找出满足全部条件的元组”时的威力。
- ④ 在多表关联时不清楚是用普通连接还是自然连接、外连接,从而出现错误结果或重复数据。
数据库中的六种主要关系运算
1️⃣ 选择
从一个关系 R 中挑选出满足指定条件的元组。SQL 对应:SELECT * FROM R WHERE 条件;
2️⃣ 投影
从关系 R 中选取若干属性列。去掉其余列,生成只包含所需属性的新关系。SQL 对应:SELECT 列1,列2 FROM R;
3️⃣ 笛卡尔积
将两个关系 R 与 S 的每一条元组两两组合,形成新的关系。SQL 对应:CROSS JOIN。
4️⃣ 连接
在笛卡尔积的基础上,根据指定的连接条件保留满足条件的元组组合。
-
等值连接 / 内连接:
SELECT …FROM R INNER JOIN S ON R.key = S.key; - 自然连接:自动基于同名属性进行等值匹配。不过,
- 外连接:保留左/右/全表中不匹配的元组。
5️⃣ 并 & 交 & 差
这三类集合运算是关系代数中的基本操作,需要参与运算的两个关系具有相同的属性集。
-
并 :
R ∪ S再看SQL,SELECT * FROM R UNION SELECT * FROM S; -
交 :
R ∩ SSQL这方面,SELECT * FROM R INTERSECT SELECT * FROM S; -
差 :
R – S说到SQL,SELECT * FROM R EXCEPT SELECT * FROM S;
6️⃣ 除
A ÷ B 返回在 A 中能够与 B 的每一个元组配对成功的 A 的投影属性值集合。典型场景是“找出选修了所有课程的学生”。SQL 实现通常借助分组和计数:
SELECT A.student_id
FROM enrollment AS A
GROUP BY A.student_id
HING COUNT = FROM courses);
快速对照表 📋
| 运算名称 | 作用描述 | 常见 SQL 实现方式 |
|---|---|---|
| Select | 行过滤——满足条件的元组子集 | S E L E C T …WHERE , |
| Projection | S E L E C T col1,col2 …怎么说呢, | |
| Cartesian Product | CROSS JOIN | |
| Link/Join | {INNER|LEFT|RIGHT|FULL} JOIN …ON , | |
| Union / Intersection / Difference | 要求结构相同;说起来,分别对应 UNION、INTERSECT、EXCEPT。 | |
| Division | - 通过 GROUP BY + HING 实现 - | |

