Skip to content

第五章:关系代数(Relational Algebra)笔记

一、什么是关系代数?

关系代数是一种用于操作关系(表)的数学语言,是数据库查询语言的理论基础。

核心概念:

  • 操作对象:关系(即表)
  • 操作符:选择、投影、连接、集合运算等
  • 目标:用这些操作符构建查询表达式,获取我们需要的数据

二、核心操作符(Core Operators)

操作符号说明
并(Union)合并两个关系
交(Intersection)取两个关系共有的元组
差(Difference)取第一个中有但第二个中没有的元组
选择(Selection)σC筛选满足条件的行
投影(Projection)π选出指定列,并去重
广义投影(Extended Projection)π可以进行计算、重命名
笛卡尔积(Product)×将两个表的所有行组合起来
Theta 连接(Theta Join)C基于条件C的连接(如A=B
自然连接(Natural Join)自动按同名属性等值连接,去掉重复列
重命名(Renaming)ρ给关系或属性起新名字
去重(Duplicate Elimination)δ去重,将重复元组合并为一条
排序(Sorting)τ按指定属性排序
分组(Grouping)γL按指定属性分组

三、详细讲解每个操作符

1. 选择(σC

从一个关系中选出满足条件C的元组(行)

示例:

JoeMenu:=σbar="Joes"(Sells)

表示从 Sells 表中选出 bar = "Joe's" 的所有记录。


2. 投影(π

从一个关系中选出某些列(属性),并去除重复元组

示例:

Prices:=πbeer,price(Sells)

Sells 表中选出 beerprice 列,并去重。


3. 广义投影(Extended Projection)

在投影时可以添加新的列,比如通过计算生成新列,也可以对已有列重命名

示例:

设关系R(A,B)为:

[1234]

广义投影:

πA+BC,A,A(R)

结果为:

[CA1A2311733]

4. 笛卡尔积(×

将两个关系的所有元组进行配对,形成一个新的关系

示例:

R3:=R1×R2

注意:如果两个表有相同属性名,需要加前缀区分,如 R1.A, R2.A


5. Theta 连接(C

先做笛卡尔积,再根据某个条件筛选出符合条件的元组

示例:

BarInfo:=SellsSells.bar=Bars.nameBars

相当于先做乘积,再选 bar 相同的记录。


6. 自然连接(

自动按照相同名称的属性进行等值连接,并自动去掉重复列

示例:

BarInfo:=SellsBars

系统会自动按 bar 字段连接,并只保留一份 bar 列。


7. 重命名(ρ

给关系或属性起新名字,常用于避免列名冲突

示例:

ρR(bar,addr)(Bars)

Bars(name, addr) 重命名为 R(bar, addr)

8. 去重(δ

去重,将重复元组合并为一条

9. 排序(τL

按指定属性排序 L 是排序的属性列表,默认升序

排序


四、构建复杂表达式的方法

1. 使用赋值语句

R4:=R1×R2R3:=σC(R4)

2. 嵌套表达式

R3:=σC(R1×R2)

3. 表达式树(Expression Tree)

图形化表示查询流程,根节点是最终结果,子节点是输入和操作。

示例:


      / \
 πname   πbar
    |       |
 σaddr=“Maple St.”   σprice<3 AND beer=“Bud”
    |                   |
  Bars               Sells

五、结果模式(Schema of Results)

操作结果模式
并、交、差同两个操作数的模式
选择与原表结构相同
投影指定列组成的结构
笛卡尔积所有属性合并,若重名则加前缀
Theta 连接同笛卡尔积
自然连接合并两个表的属性,去掉重复列
重命名按照重命名规则来定义

六、多包代数(Bag Algebra)

SQL 实际上是一种基于“包”(bag 或 multiset)的语言,即允许重复元组存在。

包 vs 集合

操作包的行为集合的行为
选择(σ对每一行单独处理,不影响重复性同左
投影(π不去重去重
并(求和(如{1}{1}={1,1}合并({1}{1}={1}
交(取最小出现次数同集合
差(出现次数相减(不能为负)同集合

七、关系代数定律(Algebra Laws)

一些在集合代数中成立的定律在包代数中不一定成立:

定律是否适用于包?
并交换律(RS=SR✅ 成立
并幂等律(RR=R❌ 不成立(包中变成两倍)
连接结合律✅ 成立
分配律❌ 不一定成立

八、总结表格

操作符中文名功能
σ选择选出满足条件的行
π投影选出某些列
×笛卡尔积两表所有行组合
CTheta 连接按条件连接
自然连接按同名属性等值连接
ρ重命名更改关系或属性名
合并两个关系
取两个关系共有的元组
取第一个中有但第二个中没有的元组

九、典型应用示例

示例 1:查找住在 Maple St 的酒吧名字

πname(σaddr="MapleSt."(Bars))

示例 2:查找卖 Bud 啤酒价格低于$3 的酒吧

πbar(σbeer="Bud"price<3(Sells))

示例 3:查找既在 Maple St 上又卖 Bud 的酒吧(并集)

πname(σaddr="MapleSt."(Bars))πbar(σbeer="Bud"price<3(Sells))

如果你需要我帮你整理成 PDF、Word 文档,或者想看图解、练习题,都可以告诉我 😊