3.5 关系代数
本课核心知识点整理
关系代数为什么要学
关系模式是二维表,关系代数就是在二维表之间做运算。它是 SQL 查询的理论基础,也是上午选择题的常考点。字幕提到,这部分常考 2 到 4 分,题型包括结果的属性个数、元组个数、自然连接与笛卡尔积的等价表达,以及查询语义翻译。
关系代数里有两个维度必须抓牢:
| 维度 | 关系术语 | 运算关注 |
|---|---|---|
| 垂直方向 | 属性列,属性个数称为目或度 | 投影、连接后的属性数 |
| 水平方向 | 元组行,一行是一条记录或一个实例 | 选择、并交差后的元组数 |
集合运算:并、交、差
并、交、差针对两个关系的元组集合做运算。前提是两个关系相容,即属性列结构一致,通常要求属性个数相同、对应属性的域相容。
| 运算 | 符号 | 语义 | 元组结果 |
|---|---|---|---|
| 并 | 属于 R 或属于 S | 去重后的合并 | |
| 交 | 同时属于 R 和 S | 公共元组 | |
| 差 | 属于 R 但不属于 S | R 中排除 S 的部分 |
如果 S1 有学生 001,003,004,S2 有学生 001,008,021:
注意并集不重复记录相同元组,这是关系模型作为集合的基本特征。
专门的关系运算:选择、投影、连接
选择:横向筛选行
选择用
它保留满足条件的行,属性列不变。自然语言中“找出满足……条件的记录”通常对应选择。
投影:纵向选取列
投影用
它保留指定列,元组可能因为去掉区分属性而出现重复,关系代数结果通常按集合去重。自然语言中“只显示……字段”通常对应投影。
笛卡尔积:两表元组两两组合
笛卡尔积用
则:
它会把两个关系的每一行两两拼接,结果通常很大,实际查询中会再配合选择条件过滤。
连接:带条件的组合
连接可以理解为“先做笛卡尔积,再按连接条件选择”。例如:
自然连接会自动按同名属性相等进行连接,并且同名属性只保留一份。若 R 有 m 个属性,S 有 n 个属性,二者有 k 个同名连接属性,则自然连接结果的属性数通常为:
查询翻译的顺序
把自然语言翻译成关系代数时,可以按“来源、条件、输出”三步:
| 查询语义 | 关系代数动作 |
|---|---|
| 数据来自一张表 | 直接从该关系开始 |
| 数据来自多张表 | 先连接或笛卡尔积加选择 |
| 要满足某条件 | 用选择 |
| 只需要部分字段 | 最后用投影 |
| 要求 A 有而 B 没有 | 用差 |
例如“查询选修了 C01 课程的学生姓名”,思路不是先投影姓名,而是先把学生和选课按学号连接,筛选课程号,再投影姓名:
做题路线
- 先判断运算是否要求关系相容。并、交、差必须相容,笛卡尔积和连接不要求同结构。
- 计算属性数时记住:投影会减少列,选择不改变列,笛卡尔积列数相加,自然连接同名列合并。
- 计算元组数时记住:选择会减少或不变,投影可能去重,笛卡尔积为两表行数相乘。
- 翻译查询时通常先连接数据来源,再选择条件,最后投影输出列。
例题
从学生表中找出“年龄大于 20”的记录,主要使用:
只取学生表中的“学号、姓名”两列,主要使用:
自查要点
- 选择和投影的区别是什么?
- 连接一般用于什么场景?
- 并、交、差为什么要求关系相容?