数据库系统概论(六)详细讲解关系代数
- 前言
- 一、什么是关系代数?
- 二、传统的集合运算
- 1. 并(Union)
- 2. 差(Difference)
- 3. 交(Intersection)
- 4. 笛卡尔积(Cartesian Product)
- 三、专门的集合运算
- 1. 选择(Selection)
- 2. 投影(Projection)
- 3. 连接(Join)
- ① 非等值连接
- ② 等值连接
- ③ 自然连接
- ④ 外连接(保留未匹配的行)
- 4. 除(Division)
- 四、总结
前言
- 在数据库系统概论的学习进程中,我们已逐步解锁数据库的关键领域,从基础概念的积淀到关系模型数据结构的深度解析,每一篇都在为构筑完备的数据库知识大厦奠基。
- 作为系列的第六篇,本文将深度钻研关系代数 —— 这一数据库操作的形式化语言。它不仅是破解数据库查询与数据操作奥秘的核心密钥,更是精通数据库设计、提升查询优化能力的关键阶梯,将带领我们进一步洞悉数据库高效运作的数据处理之道。
我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的数据库系统概论专栏
https://blog.csdn.net/2402_83322742/category_12911520.html?spm=1001.2014.3001.5482
一、什么是关系代数?

简单理解:关系代数是数据库的“数学语言”,用来定义如何对数据表(二维表格)进行操作。
核心思想:通过各种“运算符”对表进行“行”或“列”的处理,得到新表。
二、传统的集合运算
前提:参与运算的表必须“相容”
即 **列数相同,且对应列的数据类型一致**(比如都是“姓名”“年龄”这样的列)。
1. 并(Union)
作用:合并两个表的所有数据,重复数据只保留一份。
符号:R∪S
例子:
并运算结果(表A∪表B):
2. 差(Difference)
作用:从表A中删除表B中存在的数据。
符号: ( R - S )
例子:表A - 表B(只保留表A有、表B没有的数据):
3. 交(Intersection)
作用:找出两个表中完全相同的数据。
符号: ( R ∩ S )
例子:表A∩表B(同时在表A和表B中出现的数据):
表A(学生选课表A)
表B(学生选课表B)
交运算结果(表A ∩ 表B)
4. 笛卡尔积(Cartesian Product)
作用:将两个表的每一行两两组合,生成一个大表。
符号: ( R × S )
例子:
笛卡尔积结果(表A×表B,共 ( 2×2=4 ) 行):
姓名 | 性别 | 课程名 |
---|
张三 | 男 | 数学 |
张三 | 男 | 英语 |
李四 | 女 | 数学 |
李四 | 女 | 英语 |
三、专门的集合运算
1. 选择(Selection)
作用:按条件筛选表中的“行”(筛选后行数可能减少)。
符号:
例子:从“学生表”中选出“年龄>18”的学生:
选择结果
2. 投影(Projection)
作用:选择表中的“列”,并去除重复行(筛选后列数可能减少)。
符号: 
例子:从“学生表”中提取“姓名”和“性别”列:
投影结果

3. 连接(Join)
作用:按条件将两个表“拼接”成一个表,重点是“如何拼接”。
① 非等值连接
条件:用“≠、>、<”等非等号条件拼接。
例子:表A(学生成绩)和表B(及格线)按“成绩>及格分”连接:
结果(成绩>及格分,即80>60):
关系 ( R )
( A ) | ( B ) | ( C ) |
---|
( a_1 ) | ( b_1 ) | ( 5 ) |
( a_1 ) | ( b_2 ) | ( 6 ) |
( a_2 ) | ( b_3 ) | ( 8 ) |
( a_2 ) | ( b_4 ) | ( 12 ) |
关系 ( S )
( B ) | ( E ) |
---|
( b_1 ) | ( 3 ) |
( b_2 ) | ( 7 ) |
( b_3 ) | ( 10 ) |
( b_3 ) | ( 2 ) |
( b_5 ) | ( 2 ) |
非等值连接 (E>C)
( A ) | ( R.B ) | ( C ) | ( S.B ) | ( E ) |
---|
( a_1 ) | ( b_1 ) | ( 5 ) | ( b_2 ) | ( 7 ) |
( a_1 ) | ( b_1 ) | ( 5 ) | ( b_3 ) | ( 10 ) |
( a_1 ) | ( b_2 ) | ( 6 ) | ( b_2 ) | ( 7 ) |
( a_1 ) | ( b_2 ) | ( 6 ) | ( b_3 ) | ( 10 ) |
( a_2 ) | ( b_3 ) | ( 8 ) | ( b_3 ) | ( 10 ) |
② 等值连接
条件:用“=”拼接,要求两表有相同列名(或不同列名但值相等)。
例子:表A和表B按“课程=课程名”连接(假设列名不同但含义相同):
结果(课程=课程名):
关系 ( R )
( A ) | ( B ) | ( C ) |
---|
( a_1 ) | ( b_1 ) | ( 5 ) |
( a_1 ) | ( b_2 ) | ( 6 ) |
( a_2 ) | ( b_3 ) | ( 8 ) |
( a_2 ) | ( b_4 ) | ( 12 ) |
关系 ( S )
( B ) | ( E ) |
---|
( b_1 ) | ( 3 ) |
( b_2 ) | ( 7 ) |
( b_3 ) | ( 10 ) |
( b_3 ) | ( 2 ) |
( b_5 ) | ( 2 ) |
等值连接 (R.B=S.B)
( A ) | ( R.B ) | ( C ) | ( S.B ) | ( E ) |
---|
( a_1 ) | ( b_1 ) | ( 5 ) | ( b_1 ) | ( 3 ) |
( a_1 ) | ( b_2 ) | ( 6 ) | ( b_2 ) | ( 7 ) |
( a_2 ) | ( b_3 ) | ( 8 ) | ( b_3 ) | ( 10 ) |
( a_2 ) | ( b_3 ) | ( 8 ) | ( b_3 ) | ( 2 ) |
③ 自然连接
特点:自动去除重复列名,是“等值连接的优化版”(要求两表有至少一个同名列)。
例子:表A和表B都有“课程”列,自然连接后合并该列:
结果(自动合并“课程”列):
关系 ( R )
( A ) | ( B ) | ( C ) |
---|
( a_1 ) | ( b_1 ) | ( 5 ) |
( a_1 ) | ( b_2 ) | ( 6 ) |
( a_2 ) | ( b_3 ) | ( 8 ) |
( a_2 ) | ( b_4 ) | ( 12 ) |
关系 ( S )
( B ) | ( E ) |
---|
( b_1 ) | ( 3 ) |
( b_2 ) | ( 7 ) |
( b_3 ) | ( 10 ) |
( b_3 ) | ( 2 ) |
( b_5 ) | ( 2 ) |
自然连接 R组的B列与S组的B列如果相等则连接
( A ) | ( B ) | ( C ) | ( E ) |
---|
( a_1 ) | ( b_1 ) | ( 5 ) | ( 3 ) |
( a_1 ) | ( b_2 ) | ( 6 ) | ( 7 ) |
( a_2 ) | ( b_3 ) | ( 8 ) | ( 10 ) |
( a_2 ) | ( b_3 ) | ( 8 ) | ( 2 ) |
④ 外连接(保留未匹配的行)
- 左外连接:保留左表所有行,右表无匹配的行用NULL填充。
- 右外连接:保留右表所有行,左表无匹配的行用NULL填充。
- 全外连接:保留左右表所有行,无匹配的行用NULL填充(SQL中常用,关系代数中较少提)。
例子:左表A(学生)和右表B(选课),左外连接保留所有学生,无论是否选课:
左外连接结果:
表A
表B
右外连接结果(保留右表B所有行,左表A无匹配填 NULL
)
4. 除(Division)
作用:从“被除数表”中找出“完全包含除数表所有数据”的行。
前提:
- 被除数表(表A)需包含除数表(表B)的所有列,且还有额外列(如“学生”列)。
- 结果是“额外列”中,满足“与除数表所有行相关”的值。
例子:
表A(学生选课,被除数) | 学生 | 课程 |
---|
| 张三 | 数学 |
| 张三 | 英语 |
| 李四 | 数学 |
| 王五 | 英语 |
除运算逻辑:
- 表B要求“必须选数学”。
- 表A中每个学生的选课需包含表B的所有课程(即必须有“数学”)。
- 筛选出“学生”列中,满足条件的学生:
除运算结果(表A ÷ 表B):
四、总结
分类 | 运算符 | 作用描述 | 核心操作对象 | 例子关键词 |
---|
传统集合运算 | 并(∪) | 合并两表,去重 | 整表 | 合并选课学生 |
| 差(-) | 表A减表B | 整表 | 找出表A独有的数据 |
| 交(∩) | 找出两表共同数据 | 整表 | 同时出现在两表中的学生 |
| 笛卡尔积(×) | 两两组合所有行 | 整表 | 学生×课程生成所有可能组合 |
专门集合运算 | 选择(σ) | 按条件筛选行 | 行(筛选) | 选出年龄>18的学生 |
| 投影(π) | 选择列,去重 | 列(筛选) | 提取姓名和性别列 |
| 连接(⋈) | 按条件拼接两表 | 行(拼接) | 等值连接、自然连接、外连接 |
| 除(÷) | 找出包含除数所有行的被除数数据 | 行(匹配) | 找出选了所有必选课程的学生 |
以上就是这篇博客的全部内容,下一篇我们将继续探索更多精彩内容。
我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的数据库系统概论专栏
https://blog.csdn.net/2402_83322742/category_12911520.html?spm=1001.2014.3001.5482
