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

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

难度 :⭐⭐⭐⭐

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

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

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

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

相关推荐
志尊宝9 分钟前
Vue3 零基础每日笔记(040):Vite 创建 Vue3 + TS 项目——企业标配从这一篇开始
笔记·vue·html·前端开发·软件开发
水云桐程序员28 分钟前
量子力学概论,量子力学概念总结
笔记·科技·学习·量子计算
lusklusklusk36 分钟前
Oracle索引组织表,SQLServer聚集索引,Mysql Innodb表的数据行不是在磁盘上像排队一样严格连续地存放
mysql·postgresql·oracle·sqlserver
让学习成为一种生活方式38 分钟前
PMGD:植物线粒体基因组数据库--Journal of Integrative Plant Biology
数据库
darin_ฅ( ̳• ◡ • ̳)ฅ11 小时前
【 Obsidian】2026版-Obsidian安装Automatic Table of Contents 插件一键生成文章目录
笔记
2401_850122041 小时前
航空、轨交、汽车线束防护有什么不同?三大行业的共性、差异与选型逻辑
经验分享·笔记·科技
达梦数据1 小时前
达梦数据复制软件DMDRS搭建部署示例:源数据库DM8到目标数据库DM8一对一数据同步
数据库
志尊宝1 小时前
Vue3 零基础每日笔记(037):动手封装 useMouse 与 useWindowSize——事件监听的标准模板
前端·javascript·vue.js·笔记·html5
有范先生1 小时前
【无标题】
笔记
IT_Octopus1 小时前
从一个应用开发者的角度,搞懂大数据查询的完整链路
java·大数据·数据库