【数据库技术】关系代数连接运算(等值连接/自然连接/外连接)

考点频率 :★★★★★(下午题必考,选择题常考,是关系代数中最重要的运算)

难度 :⭐⭐⭐⭐

建议:重点掌握三种连接的定义和区别,尤其是自然连接与等值连接的差异,以及外连接的三种形式

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 定义

自然连接 是等值连接的一种特例。它要求:

  1. 两个关系必须有同名属性
  2. 在这个同名属性上做等值连接
  3. 结果中去掉重复的属性列

符号 :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. 两者结果的行数不同

🔔 本专栏日更,点击头像 → 专栏《软考中级高频考点》订阅,第一时间接收新内容

#软考中级 #软件设计师 #关系代数 #等值连接 #自然连接 #外连接 #数据库技术基础 #软考备考

相关推荐
摇滚侠19 小时前
《On Java 中文版 基础卷》阅读笔记 实现隐藏 12
java·数据库·笔记
川石课堂软件测试19 小时前
学习软件测试需掌握的一些知识
数据库·python·sql·功能测试·网络协议·mysql·http
2501_9377671620 小时前
自建 SQL 数据库定时备份踩坑复盘与落地思路
数据库·sql
silvamux_21 小时前
10款模型写种草笔记:可发布性、返工来源与成本数据缺口复盘
java·数据库·笔记
蒸蒸yyyyzwd1 天前
kafka、redis、mysql不熟悉问题总结
笔记·八股
hgy89691 天前
深度学习(小白笔记)——迁徙
人工智能·笔记·深度学习
摇滚侠1 天前
《On Java 中文版 基础卷》阅读笔记 实现隐藏 11
java·笔记·python
I Am a robert girl1 天前
从 GameHorizon 拆解多时间尺度游戏评测:数据管线、离线基准与在线回放的三层设计
数据库·游戏·多时间尺度·数据管线·游戏评测·离线基准·在线回放
躺柒1 天前
读数据安全架构设计与实践17安全架构案例(下)
数据库·安全·零信任·安全架构·防火墙·无边界
SelectDB1 天前
实时更新排错现场:导入了却查到旧数据,和 FINAL 越加越慢的两条路
大数据·数据库·数据分析