0
0
0

第3章精讲:关系模型与关系代数

2026-10-19
文章摘要
|

第 3 章:关系模型与关系代数精讲

关系代数是 SQL 的"数学原型"。看起来抽象,其实每一种运算都能在 SQL 里找到对应写法。本章先过一遍关系模型术语,再把 7 种运算逐个讲透,最后给出综合题的解题流程。

一、关系模型的术语体系

一张表就是一个关系。逐个对号:

术语 直观理解
关系 一张规范化的二维表
元组 表中的一行(一条记录)
属性 表中的一列(一个字段)
域 属性的取值范围
分量 元组在某个属性上的具体值
候选码 唯一标识元组的最小属性集
主码 选定的一个候选码
主属性 出现在任一候选码中的属性
非主属性 不在任何候选码中的属性
外码 引用另一个关系候选码的属性(组)

关系的性质(选择题):属性名唯一且同质(同列取自同一域);元组不重复;行列次序可以任意交换;每个分量必须是不可再分的数据项(原子性)。最后一条是"规范化二维表"的判据——单元格内不能是"电话1/电话2"这种复合值。

二、传统集合运算(要求相容:属性个数相同且对应域相同)

设有学生 A 班名单 R 和 B 班名单 S(结构相同):

  1. 并 R ∪ S:两个班所有学生(去重);
  2. 差 R − S:在 R 中但不在 S 中的学生(只在 A 班);
  3. 交 R ∩ S:两个班都有的学生;R ∩ S = R − (R − S);
  4. 笛卡尔积 R × S:把两个任意结构关系的元组两两拼接。结果列数 = 两者之和,行数 = 两者之积。它本身意义不大,但它是"连接"的原料。

三、专门的关系运算(考试核心)

以下用 Student(Sno, Sname, Sdept, Sage) 和 SC(Sno, Cno, Grade) 示例。

1. 选择 σ:按条件挑行(水平切割)

σSdept='计算机' ∧ Sage>20(Student) → 计算机系 20 岁以上的学生行。

SQL 对应:SELECT * FROM Student WHERE Sdept='计算机' AND Sage>20。

2. 投影 π:按列挑取(垂直切割,自动去重)

πSname,Sdept(Student) → 只留姓名、系别两列。

SQL 对应:SELECT Sname,Sdept FROM Student。

3. 连接 ⋈:把两张表按条件拼起来

  • θ 连接:R ⋈AθB S,保留满足 θ 条件的拼接行;
  • 等值连接:θ 取 =;
  • 自然连接:比较同名列相等,且结果去掉重复列——最常用,隐含条件通常是主码 = 外码。

考点:自然连接与等值连接的区别 = 是否去掉重复属性列。

SQL 对应:FROM Student JOIN SC ON Student.Sno = SC.Sno。

4. 除法 ÷:回答"全部/所有"型查询

"查询选修了全部课程的学生学号":

SC ÷ Course。被除关系 SC(X,Y),除数关系 Course(Y),结果取 X 中那些在 SC 中与 Course 的每一个 Cno 都配对过的 Sno。

口诀记牢:题目出现"全部/所有/每一门",答案就是除法。

四、综合题解题流程(背下来)

考题形式:"设有……关系模式,用关系代数写出查询"。

第一步:读题,圈出"查询结果要什么列"和"条件"。
第二步:判断用几张表 → 多表先自然连接(按主外码)。
第三步:套公式组合:

π 输出列 ( σ 条件 ( 表1 ⋈ 表2 ) )

第四步:若条件含"所有/全部",改用除法,外层再套 π。

例题:查询选修了'C02'号课程且成绩大于 80 的学生姓名。

πSname( σCno='C02' ∧ Grade>80(Student ⋈ SC) )

五、自测题

  1. 候选码和主码的区别是什么?(一个是资格,一个是当选者)
  2. 自然连接与等值连接的区别?(去不去重复列)
  3. "查询供应了全部零件的供应商"用什么运算?(除法)
  4. 投影之后行数会不会变少?(会,因为去重)

下一篇进入全书最重的板块——第 4 章 SQL 之建库建表。

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或者给予支持!

评论

欢迎来到我的博客!