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

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

难度 :⭐⭐⭐⭐

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

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

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

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

相关推荐
小王C语言19 分钟前
MySQL 视图:视图是什么,视图和基表之间的关系
数据库·mysql
程序员-Benothing21 分钟前
什么是 MySQL 的主从同步机制?它是如何实现的?
android·数据库·mysql
金立基包装胶水23 分钟前
水性纸袋热封胶,常见故障有多少种?
大数据·笔记·其他
Wang's Blog25 分钟前
Vibe Coding一人即团队系列31:基于Claude Code实现登录注册与数据库联动
数据库·人工智能
维克兜率天27 分钟前
4.1.3 策略类型全景图:六大策略,你适合哪个
笔记·python·算法·量化
2601_9620566028 分钟前
Spring Boot——日志介绍和配置
java·数据库·spring boot
路弥行至30 分钟前
ROS2 通信避坑实录:从 topic/msg 底层原理到一次内存错位复盘
网络·经验分享·笔记·其他·内存·topic·ros2
Cloud云卷云舒31 分钟前
【运营商数据库】实战淬炼,规模落地 | 中国移动HaishanDB年中总结会圆满召开
数据库·postgresql·ai-native·haishandb·移动云海山数据库
烂蜻蜓31 分钟前
Flask入门教程(十三):数据库操作——SQLAlchemy与CRUD完整实践
数据库·oracle·flask