Skip to content
难度基础(★)
建议时长45分钟

3.5 关系代数

本课核心知识点整理
本课核心知识点手绘流程图(SVG)

关系代数为什么要学

关系模式是二维表,关系代数就是在二维表之间做运算。它是 SQL 查询的理论基础,也是上午选择题的常考点。字幕提到,这部分常考 2 到 4 分,题型包括结果的属性个数、元组个数、自然连接与笛卡尔积的等价表达,以及查询语义翻译。

关系代数里有两个维度必须抓牢:

维度关系术语运算关注
垂直方向属性列,属性个数称为目或度投影、连接后的属性数
水平方向元组行,一行是一条记录或一个实例选择、并交差后的元组数

集合运算:并、交、差

并、交、差针对两个关系的元组集合做运算。前提是两个关系相容,即属性列结构一致,通常要求属性个数相同、对应属性的域相容。

运算符号语义元组结果
RS属于 R 或属于 S去重后的合并
RS同时属于 R 和 S公共元组
RS属于 R 但不属于 SR 中排除 S 的部分

如果 S1 有学生 001,003,004S2 有学生 001,008,021

S1S2={001,003,004,008,021}S1S2={001}S1S2={003,004}

注意并集不重复记录相同元组,这是关系模型作为集合的基本特征。

专门的关系运算:选择、投影、连接

选择:横向筛选行

选择用 σ 表示,按条件筛选元组:

σ年龄>20(学生)

它保留满足条件的行,属性列不变。自然语言中“找出满足……条件的记录”通常对应选择。

投影:纵向选取列

投影用 π 表示,选取指定属性:

π学号,姓名(学生)

它保留指定列,元组可能因为去掉区分属性而出现重复,关系代数结果通常按集合去重。自然语言中“只显示……字段”通常对应投影。

笛卡尔积:两表元组两两组合

笛卡尔积用 R×S 表示。若:

|R|=r,|S|=s,degree(R)=m,degree(S)=n

则:

|R×S|=r×s,degree(R×S)=m+n

它会把两个关系的每一行两两拼接,结果通常很大,实际查询中会再配合选择条件过滤。

连接:带条件的组合

连接可以理解为“先做笛卡尔积,再按连接条件选择”。例如:

RR.A=S.AS=σR.A=S.A(R×S)

自然连接会自动按同名属性相等进行连接,并且同名属性只保留一份。若 Rm 个属性,Sn 个属性,二者有 k 个同名连接属性,则自然连接结果的属性数通常为:

degree(RS)=m+nk

查询翻译的顺序

把自然语言翻译成关系代数时,可以按“来源、条件、输出”三步:

查询语义关系代数动作
数据来自一张表直接从该关系开始
数据来自多张表先连接或笛卡尔积加选择
要满足某条件用选择 σ
只需要部分字段最后用投影 π
要求 A 有而 B 没有用差

例如“查询选修了 C01 课程的学生姓名”,思路不是先投影姓名,而是先把学生和选课按学号连接,筛选课程号,再投影姓名:

π姓名(σ课程号=C01(学生选课))

做题路线

  1. 先判断运算是否要求关系相容。并、交、差必须相容,笛卡尔积和连接不要求同结构。
  2. 计算属性数时记住:投影会减少列,选择不改变列,笛卡尔积列数相加,自然连接同名列合并。
  3. 计算元组数时记住:选择会减少或不变,投影可能去重,笛卡尔积为两表行数相乘。
  4. 翻译查询时通常先连接数据来源,再选择条件,最后投影输出列。

例题

单选
从学生表中找出“年龄大于 20”的记录,主要使用:
单选
只取学生表中的“学号、姓名”两列,主要使用:

自查要点

  1. 选择和投影的区别是什么?
  2. 连接一般用于什么场景?
  3. 并、交、差为什么要求关系相容?