考点频率 :★★★★★(下午题必考,选择题常考,是关系代数中最重要的运算)
难度 :⭐⭐⭐⭐
建议:重点掌握三种连接的定义和区别,尤其是自然连接与等值连接的差异,以及外连接的三种形式
1️⃣ 为什么需要连接运算?
上一篇文章我们学了五种基本运算:选择、投影、并、差、笛卡尔积。其中笛卡尔积有一个大问题------它会把两张表的所有行两两组合,产生大量无意义的组合。
打个比方 :你有学生表和课程表,做笛卡尔积会得到"每个学生 × 每门课"的所有组合------包括学生选了这门课和没选这门课的。我们需要一种方法,只保留那些有意义的组合(比如只保留学生实际选了的课)。
连接运算 就是在笛卡尔积的基础上,加上连接条件 ,只保留满足条件的组合。它相当于:
连接=选择连接条件(笛卡尔积)\text{连接} = \text{选择}_{\text{连接条件}}(\text{笛卡尔积})连接=选择连接条件(笛卡尔积)
连接运算是关系代数中使用最频繁的运算,也是软考下午题必考的内容。
2️⃣ 等值连接(Equi-Join)
2.1 定义
等值连接 是在笛卡尔积的基础上,选择两个关系中指定属性值相等的元组。
符号 :R⋈R.A=S.BSR \Join_{R.A = S.B} SR⋈R.A=S.BS
2.2 关键特征
| 特征 | 说明 |
|---|---|
| 连接条件 | 使用 "=" 比较两个属性(属性名可以不同) |
| 结果列数 | 两个关系列数之和(保留所有列) |
| 重复列 | 保留重复列(两个表中的连接属性都会出现在结果中) |
注意:等值连接只要求连接条件用"=",两个属性名可以不同,只要值类型相容即可。
2.3 示例
学生表 R:
| 学号 | 姓名 | 班级号 |
|---|---|---|
| 001 | 张三 | 101 |
| 002 | 李丽 | 102 |
| 003 | 王五 | 101 |
班级表 S:
| 班级编号 | 班级名称 |
|---|---|
| 101 | 计科1班 |
| 102 | 计科2班 |
等值连接 R⋈R.班级号=S.班级编号SR \Join_{R.班级号 = S.班级编号} SR⋈R.班级号=S.班级编号S:
| 学号 | 姓名 | 班级号 | 班级编号 | 班级名称 |
|---|---|---|---|---|
| 001 | 张三 | 101 | 101 | 计科1班 |
| 002 | 李丽 | 102 | 102 | 计科2班 |
| 003 | 王五 | 101 | 101 | 计科1班 |
注意:
班级号和班级编号两列都保留了,且值相等。
3️⃣ 自然连接(Natural Join)
3.1 定义
自然连接 是等值连接的一种特例。它要求:
- 两个关系必须有同名属性
- 在这个同名属性上做等值连接
- 结果中去掉重复的属性列
符号 :R⋈SR \Join SR⋈S(不写连接条件)
3.2 与等值连接的关键区别
这是软考选择题的高频考点,务必分清:
| 对比项 | 等值连接 | 自然连接 |
|---|---|---|
| 连接条件 | 必须指定(可以属性名不同) | 自动在同名属性上连接 |
| 重复列 | 保留(两列都存在) | 去除(只保留一列) |
| 属性名要求 | 不要求同名 | 必须有同名属性 |
| 结果列数 | 两表列数之和 | 列数之和 - 同名属性数 |
一句话区分:等值连接保留重复列,自然连接去掉重复列。自然连接是等值连接的特例(有同名属性 + 去重)。
3.3 示例(与等值连接对比)
自然连接 R⋈SR \Join SR⋈S (假设同名属性为 班级号):
| 学号 | 姓名 | 班级号 | 班级名称 |
|---|---|---|---|
| 001 | 张三 | 101 | 计科1班 |
| 002 | 李丽 | 102 | 计科2班 |
| 003 | 王五 | 101 | 计科1班 |
注意:
班级号只出现一次(去掉了重复列),而等值连接中班级号和班级编号两列都存在。
4️⃣ 外连接(Outer Join)
4.1 为什么需要外连接?
等值连接和自然连接都只保留满足连接条件的元组。如果一个学生没有选课,或者一门课没有被任何学生选,这些元组就会被丢弃。
有时候我们需要保留不满足连接条件的元组------比如要查询"所有学生及其选课情况",没选课的学生也应该出现在结果中,只是课程信息为空。
4.2 三种外连接
| 类型 | 保留哪一方的未匹配元组 | 符号 |
|---|---|---|
| 左外连接(Left Outer Join) | 保留左表中所有元组 | R⋈ ⊃SR \Join\!\!\!\!\!\supset SR⋈⊃S |
| 右外连接(Right Outer Join) | 保留右表中所有元组 | R⊂ ⋈SR \subset\!\!\!\!\!\Join SR⊂⋈S |
| 全外连接(Full Outer Join) | 保留两表中所有元组 | R⋈ ⋈SR \Join\!\!\!\!\!\Join SR⋈⋈S |
记忆技巧 :左外连接 = 左表全要 (右边的没有就填NULL);右外连接 = 右表全要 ;全外连接 = 两边全要。
4.3 示例
选课表 R:
| 学号 | 课程号 |
|---|---|
| 001 | C01 |
| 001 | C02 |
| 003 | C01 |
| 004 | C03 |
课程表 S:
| 课程号 | 课程名 |
|---|---|
| C01 | 数学 |
| C02 | 语文 |
| C03 | 英语 |
| C04 | 物理 |
左外连接 R⋈ ⊃SR \Join\!\!\!\!\!\supset SR⋈⊃S(保留选课表全部):
| 学号 | 课程号 | 课程名 |
|---|---|---|
| 001 | C01 | 数学 |
| 001 | C02 | 语文 |
| 003 | C01 | 数学 |
| 004 | C03 | 英语 |
右外连接 R⊂ ⋈SR \subset\!\!\!\!\!\Join SR⊂⋈S(保留课程表全部):
| 学号 | 课程号 | 课程名 |
|---|---|---|
| 001 | C01 | 数学 |
| 001 | C02 | 语文 |
| 003 | C01 | 数学 |
| 004 | C03 | 英语 |
| NULL | C04 | 物理 |
注意:物理课没有被任何学生选,在右外连接中保留,学号填NULL。
5️⃣ 五种连接操作全景对比表(重点!)
| 对比项 | 笛卡尔积 | 等值连接 | 自然连接 | 外连接 |
|---|---|---|---|---|
| 是否有连接条件 | 无 | 有(指定属性相等) | 有(同名属性自动相等) | 有 |
| 是否去重 | 否 | 否 | 是(同名属性只保留一列) | 否 |
| 是否保留未匹配元组 | 是(所有组合) | 否 | 否 | 是(部分/全部) |
| 结果列数 | 列数之和 | 列数之和 | 列数和 - 同名属性数 | 列数之和 |
| 软考考频 | ★★★☆☆ | ★★★★★ | ★★★★★ | ★★★★☆ |
6️⃣ 经典例题
例题1 :设有两个关系 R(A,B,C)R(A, B, C)R(A,B,C) 和 S(B,C,D)S(B, C, D)S(B,C,D),自然连接 R⋈SR \Join SR⋈S 的结果关系有几个属性?
A. 3
B. 4
C. 5
D. 6
解析 :R有3个属性,S有3个属性,同名属性为B和C(2个),结果属性数 = 3 + 3 - 2 = 4。选 B。
例题2:下列关于等值连接和自然连接的叙述中,正确的是( )。
A. 自然连接一定包含等值连接的结果
B. 等值连接必须在同名属性上进行
C. 自然连接会自动去除重复列
D. 等值连接的结果中不会出现重复列
解析 :A错误------自然连接的前提是必须有同名属性;B错误------等值连接可以在不同名 的属性上进行;D错误------等值连接保留所有列 ,可能有重复列。C正确。选 C。
例题3(判断):左外连接的结果中,左表的所有元组都会出现,右表中未匹配的元组不会出现。( )
解析:正确。左外连接保留左表全部,右表只保留匹配的元组;右表未匹配的元组不会出现在结果中。
7️⃣ 记忆口诀
等值连接指定条件,同名异名都能连。
自然连接同名连,去除重复留一边。
外连接分左右全,未匹配的不丢弃。
8️⃣ 小测验(评论区对答案)
设有关系 R(A,B)R(A, B)R(A,B) 和 S(B,C)S(B, C)S(B,C),自然连接 R⋈SR \Join SR⋈S 与等值连接 R⋈R.B=S.BSR \Join_{R.B = S.B} SR⋈R.B=S.BS 的结果相比,( )。
A. 两者的结果完全相同
B. 自然连接结果中B列只出现一次,等值连接中B列出现两次
C. 自然连接结果中B列出现两次,等值连接中B列只出现一次
D. 两者结果的行数不同
🔔 本专栏日更,点击头像 → 专栏《软考中级高频考点》订阅,第一时间接收新内容
#软考中级 #软件设计师 #关系代数 #等值连接 #自然连接 #外连接 #数据库技术基础 #软考备考