什么是自然连接?笛卡尔积怎么计算?
🧩 一、自然连接的定义(Natural Join)
自然连接(Natural Join) :
是一种特殊的连接运算,它会自动根据两个关系中相同名称的属性 进行等值匹配 ,
并且在结果中去掉重复的列。
数学记号:
R ⋈ S
或
R ⨝ S
📘 一句话理解:
"自然连接 = 自动找出同名列 → 进行等值连接 → 删除重复列。"
🧮 二、自然连接的计算步骤
假设有两个关系:
R(A, B, C) S(B, D, E)
步骤:
1️⃣ 找出公共属性(同名列)
- 公共属性:B
2️⃣ 对公共属性做等值连接
- 计算结果包括所有 R 和 S 中满足 R.B = S.B 的元组。
3️⃣ 去掉重复列
- 因为 R 和 S 都有 B,所以结果中只保留一个 B。
📘 数学表达:
R ⋈ S = σ_{R.B = S.B} ( R × S ) 的投影,且删除重复 B 列
📊 三、举例说明
关系 学生表(Student):
| 学号 | 姓名 | 班级 |
|---|---|---|
| 1 | 张三 | 101 |
| 2 | 李四 | 102 |
| 3 | 王五 | 103 |
关系 班级表(Class):
| 班级 | 班主任 |
|---|---|
| 101 | 王老师 |
| 102 | 李老师 |
| 104 | 赵老师 |
计算自然连接:
Student ⋈ Class
步骤 1:找公共列 → "班级"
步骤 2:做等值连接(Student.班级 = Class.班级)
| 学号 | 姓名 | 班级 | 班主任 |
|---|---|---|---|
| 1 | 张三 | 101 | 王老师 |
| 2 | 李四 | 102 | 李老师 |
(注:班级103、104因无匹配项,不出现在结果中)
步骤 3:去掉重复列
此处班级只出现一次(已自动完成)。
✅ 最终结果:
| 学号 | 姓名 | 班级 | 班主任 |
|---|---|---|---|
| 1 | 张三 | 101 | 王老师 |
| 2 | 李四 | 102 | 李老师 |
🔍 四、自然连接 vs 其他连接的区别
| 连接类型 | 条件方式 | 是否指定属性 | 是否去重 | 示例 |
|---|---|---|---|---|
| 笛卡尔积(×) | 无条件连接 | 否 | 否 | R × S |
| θ连接(Theta Join) | 任意条件(<, >, = 等) | 需手动指定 | 否 | R ⋈_{R.B>S.B} S |
| 等值连接(Equi Join) | 相等条件 | 需手动指定 | 否 | R ⋈_{R.B=S.B} S |
| 自然连接(Natural Join) | 自动使用同名列的相等条件 | 否 | ✅ 去掉重复列 | R ⋈ S |
📘 小结:
自然连接 = 等值连接 + 自动找同名列 + 去重
⚙️ 五、特殊情况与变形
| 情况 | 结果 |
|---|---|
| 无同名列 | 退化为笛卡尔积 |
| 公共列值不匹配 | 不出现在结果中(内连接效果) |
| 多个同名列 | 所有同名列都要相等才匹配成功 |
🧠 六、软考常见考题类型
| 题型 | 示例 | 答案思路 |
|---|---|---|
| 选择题 | "自然连接操作的特点是?" | 答:自动按同名列匹配并去重 |
| 填空题 | "若 R(A,B) 与 S(B,C) 进行自然连接,则结果模式为?" | 答:R⋈S(A,B,C) |
| 计算题 | 给出具体表格,要求列出自然连接结果 | 找同名列→匹配→去重 |
什么是笛卡尔积?
🧩 一、笛卡尔积的定义
笛卡尔积(Cartesian Product)
是关系代数中的一种二元运算,用于把两个关系(表)中每一行都与另一表的每一行组合。
数学表示:
R × S
📘 通俗理解:
"行 × 行 = 所有可能的组合"
如果一个表有 3 行,另一个表有 4 行,结果就有 3×4 = 12 行。
🧮 二、计算规则
假设:
R 有属性 (A1, A2, ..., Am),共 n1 条记录 S 有属性 (B1, B2, ..., Bn),共 n2 条记录
那么:
R × S 的结果属性为 (A1, A2, ..., Am, B1, B2, ..., Bn) 记录条数为 n1 × n2
📊 三、举例说明
关系 R(学生):
| 学号 | 姓名 |
|---|---|
| 1 | 张三 |
| 2 | 李四 |
关系 S(课程):
| 课程号 | 课程名 |
|---|---|
| A | 数学 |
| B | 英语 |
| C | 物理 |
计算笛卡尔积 R × S:
即把 每个学生 和 每门课程 组合:
| 学号 | 姓名 | 课程号 | 课程名 |
|---|---|---|---|
| 1 | 张三 | A | 数学 |
| 1 | 张三 | B | 英语 |
| 1 | 张三 | C | 物理 |
| 2 | 李四 | A | 数学 |
| 2 | 李四 | B | 英语 |
| 2 | 李四 | C | 物理 |
✅ 结果共有 2 × 3 = 6 行
🧱 四、属性命名规则
如果两个关系中有重名属性,要在结果中加上前缀以区分:
例如:
R(A, B) S(B, C) R × S → (A, R.B, S.B, C)
📘 注意:
-
自然连接(⋈)和等值连接都会在笛卡尔积的基础上"加条件";
-
笛卡尔积本身不加任何条件。
⚙️ 五、笛卡尔积与其他连接的关系
| 运算 | 条件 | 含义 | 结果行数 |
|---|---|---|---|
| 笛卡尔积(×) | 无条件 | 所有行两两组合 | n₁×n₂ |
| θ连接(θ-Join) | 任意比较条件 | 在笛卡尔积上筛选满足条件的元组 | ≤ n₁×n₂ |
| 等值连接(Equi-Join) | 相等条件 | θ连接的一种特例 | ≤ n₁×n₂ |
| 自然连接(⋈) | 自动按同名属性相等连接并去重 | ≤ n₁×n₂ |
📘 小结:
笛卡尔积 是所有连接的"基础模型"。
其他连接 = 笛卡尔积 + 选择条件 + 投影(去重复列)。
🔍 六、结果规模计算公式(常考)
若:
|R| = m,|S| = n
则:
|R × S| = m × n
📘 举例:
-
R 有 4 条,S 有 5 条 → R×S 有 20 条
-
若 R 和 S 都为空 → 结果为空(0条)
🧠 七、软考常见考题类型
| 题型 | 示例 | 答案 |
|---|---|---|
| 选择题 | "若关系R有3行,S有5行,则R×S结果有多少行?" | 15 ✅ |
| 填空题 | "R(A,B),S(B,C),求R×S的模式?" | (A,B,B,C) |
| 计算题 | 给出具体表格,列出笛卡尔积结果 | 直接做"行对行组合" |