文章目录
- 关系代数五大基本运算全解析
- 什么是关系代数?
- 五大基本运算详解
- 一张表总结
- 为什么这5种是"基本"的?
- 写在最后
关系代数五大基本运算全解析
关系代数是关系数据库的理论基石,而其中5种基本运算更是重中之重——所有其他运算(连接、交、除法等)都可以由它们推导而来。今天就来一次性搞懂它们!
什么是关系代数?
简单来说,关系代数是一套对**关系(即数据库中的"表")**进行操作的数学语言。它定义了一组运算规则,让我们能够从已有表中推导出新的表。
而在这套体系中,有5种运算被定义为基本运算,因为它们是"不可再分"的——其他所有运算都可以用这5种的组合来表达。
五大基本运算详解
并(Union,∪)
- 做什么:把两个表的所有行合并到一起,去掉重复的行。
- 前提条件:两个表必须相容——列数相同,且对应列的数据类型一致。
- 生活类比:把两个班级的花名册合在一起,同名同学只保留一个。
示例:
- 表R:{(1, 张三), (2, 李四)}
- 表S:{(2, 李四), (3, 王五)}
- R ∪ S = {(1, 张三), (2, 李四), (3, 王五)}
注意:并运算会自动去重,这是集合论的基本要求。
差(Difference,−)
- 做什么:从表R中去掉那些也出现在表S中的行,只保留"R独有的"。
- 前提条件:同样要求两表相容。
- 生活类比:A班花名册减去B班花名册,得到"只在A班、不在B班"的同学。
示例:
- R − S = {(1, 张三)}
差运算不满足交换律:R − S ≠ S − R。
广义笛卡尔积(Cartesian Product,×)
- 做什么:将两个表的每一行两两配对,生成所有可能的组合。
- 结果规模:如果R有m行、S有n行,则R × S有m × n行;列数则是两表列数之和。
- 生活类比:把3件上衣和2条裤子搭配,总共能搭配出6套。
示例:
- R有3行2列,S有2行3列
- R × S → 6行5列
笛卡尔积本身很少直接使用(结果往往太大且无意义),但它是**连接(Join)**运算的基础——连接本质上就是"先做笛卡尔积,再筛选"。
投影(Projection,π)
- 做什么:从表中选取指定的列,丢弃其余列,并消除重复行。
- 操作方向:纵向(对列操作)。
- 生活类比:从一份包含姓名、年龄、性别、地址的员工表中,只提取"姓名"和"年龄"两列。
示例:
- 学生表(学号, 姓名, 年龄, 性别)
- π(学生表) → 只保留姓名和年龄
投影后如果出现重复行,会自动去重。
选择(Selection,σ)
- 做什么:从表中筛选出满足条件的行,保留所有列。
- 操作方向:横向(对行操作)。
- 生活类比:从全班花名册中,挑出所有年龄大于20岁的同学。
示例:
- 学生表(学号, 姓名, 年龄)
- σ(学生表) → 只保留年龄>20的行
选择运算不会改变表的列结构,只影响行数。
一张表总结
| 运算 | 符号 | 操作对象 | 核心作用 |
|---|---|---|---|
| 并 | ∪ | 两个表 | 合并去重 |
| 差 | − | 两个表 | 求差集 |
| 笛卡尔积 | × | 两个表 | 全组合 |
| 投影 | π | 单个表(列) | 纵向筛选 |
| 选择 | σ | 单个表(行) | 横向筛选 |
为什么这5种是"基本"的?
因为其他常见运算都可以用它们来表达:
- 交(∩):R ∩ S = R − (R − S)
- 自然连接(⋈):先做笛卡尔积,再用选择运算筛选匹配行,最后用投影去掉重复列
- θ连接:笛卡尔积 + 选择
这就是为什么教科书把这5种定义为"基本运算"——它们是关系代数的最小完备集。
写在最后
掌握这5种基本运算,不仅能帮你理解SQL背后的原理(SELECT对应选择,SELECT列对应投影,UNION对应并,EXCEPT对应差,CROSS JOIN对应笛卡尔积),更是深入学习数据库查询优化的基础。