【数据库系统】第4讲 关系代数

第4讲 关系代数

关系运算

关系运算包括集合运算和纯关系运算:

  • 集合运算:并( ∪ \cup )、交( ∩ \cap )、差( − - )、Cartesian积( × \times ×
  • 纯关系运算:投影( Π \Pi Π)、选择( σ \sigma σ)、连接( ⋈ \Join )、除( ÷ \div ÷)、更名( ρ \rho ρ

关系的基本运算包括并( ∪ \cup )、差( − - )、Cartesian积( × \times ×)、投影( Π \Pi Π)、选择( σ \sigma σ),所有的关系运算都可由关系的基本运算组合而得。

并相容性

在运算时,参与运算的两个关系间必须有一定的对应性、可比性或意义关联性。

定义:关系 R ( A 1 , A 2 , ⋯   , A n ) R(A_1,A_2,\cdots,A_n) R(A1,A2,,An)与关系 S ( B 1 , B 2 , ⋯   , B m ) S(B_1,B_2,\cdots,B_m) S(B1,B2,,Bm)存在相容性,当且仅当

  1. n = m n=m n=m
  2. d o m A i = d o m B i \mathop{\mathrm{dom}}A_i=\mathop{\mathrm{dom}}B_i domAi=domBi i = 1 , 2 , ⋯   , n i=1,2,\cdots,n i=1,2,,n

更名运算符

使用 ρ T ′ ( T ) \rho_{T'}(T) ρT(T)将表 T T T更名为 T ′ T' T

更名运算常见于连接运算中。

关系的基本运算

并(Union)

  • 定义:若关系 R R R与关系 S S S并相容的,则 R ∪ S = { t ∣ t ∈ R ∨ t ∈ S } R\cup S=\{t\mid t\in R\lor t\in S\} RS={ttRtS}
  • 描述 R ∪ S R\cup S RS是将关系 R R R与关系 S S S合并在一起,并去掉重复的元组得到的关系。
  • 性质 R ∪ S = S ∪ R R\cup S=S\cup R RS=SR

差(Difference)

  • 定义:若关系 R R R与关系 S S S并相容的,则 R − S = { t ∣ t ∈ R ∧ t ∉ S } R-S=\{t\mid t\in R\land t\notin S\} RS={ttRt/S}
  • 描述 R − S R-S RS由在关系 R R R中但不在关系 S S S中的元组构成。

注意 R − S ≠ S − R R-S\ne S-R RS=SR

Cartesian积(Cartesian Product)

  • 定义 R × S = { ⟨ r , s ⟩ ∣ r ∈ R ∧ s ∈ S } R\times S=\{\langle r,s\rangle\mid r\in R\land s\in S\} R×S={⟨r,srRsS}
  • 描述 R × S R\times S R×S由关系 R R R中的任一元组与关系 S S S中的所有元组拼接而成。
  • 性质
    • R × S = S × R R\times S=S\times R R×S=S×R
    • deg ⁡ R × S = deg ⁡ R + deg ⁡ S \deg R\times S=\deg R+\deg S degR×S=degR+degS
    • ∣ R × S ∣ = ∣ R ∣ ⋅ ∣ S ∣ |R\times S|=|R|\cdot|S| R×S=RS.

注意:关系的Cartesian积与集合论中的不同。在集合论中, R × S R\times S R×S为一个序对,因此 R × S ≠ S × R R\times S\ne S\times R R×S=S×R,而在关系代数中,关系的属性与位置无关,因此 R × S = S × R R\times S=S\times R R×S=S×R

投影(Project)

  • 定义:设 R ( A 1 , A 2 , ⋯   , A n ) R(A_1,A_2,\cdots,A_n) R(A1,A2,,An),则 Π A i 1 , A i 2 , ⋯   , A i k ( R ) = { ⟨ t [ A i 1 ] , t [ A i 2 ] , ⋯   , t [ A i k ] ⟩ ∣ t ∈ R } \Pi_{A_{i_1},A_{i_2},\cdots,A_{i_k}}(R)=\left\{\left\langle t[A_{i_1}],t[A_{i_2}],\cdots,t[A_{i_k}]\right\rangle\mid t\in R\right\} ΠAi1,Ai2,,Aik(R)={t[Ai1],t[Ai2],,t[Aik]tR},其中 { A i 1 , A i 2 , ⋯   , A i k } ⊆ { A 1 , A 2 , ⋯   , A n } \{A_{i_1},A_{i_2},\cdots,A_{i_k}\}\subseteq\{A_1,A_2,\cdots,A_n\} {Ai1,Ai2,,Aik}{A1,A2,,An} t [ A i ] t[A_i] t[Ai]为元组 t t t中属性 A i A_i Ai的分量。

选择(Select)

  • 定义 σ c o n ( R ) = { t ∣ t ∈ R ∧ c o n ( t ) = 1 } \sigma_{con}(R)=\{t\mid t\in R\land con(t)=1\} σcon(R)={ttRcon(t)=1}
  • 描述 σ c o n ( R ) \sigma_{con}(R) σcon(R)由关系 R R R中满足条件表达式 c o n con con的所有元组构成。

关系的扩展运算

交(Intersection)

  • 定义:若关系 R R R与关系 S S S并相容的,则 R ∩ S = { t ∣ t ∈ R ∧ t ∈ S } R\cap S=\{t\mid t\in R\land t\in S\} RS={ttRtS}
  • 描述 R ∩ S R\cap S RS由同时存在于关系 R R R与关系 S S S的元组构成。
  • 性质
    • R ∩ S = S ∩ R R\cap S=S\cap R RS=SR
    • R ∩ S = R − ( R − S ) R\cap S=R-(R-S) RS=R(RS)

θ \theta θ-连接(Theta-Join)

  • 定义 R ⋈ A θ B S = σ r [ A ] θ s [ B ] ( R × S ) R\mathop{\Join}\limits_{A\theta B}S=\sigma_{r[A]\theta s[B]}(R\times S) RAθBS=σr[A]θs[B](R×S),其中 θ \theta θ是比较运算符。

等值连接(Equi-Join)

  • 定义 R ⋈ A = B S = σ r [ A ] = s [ B ] ( R × S ) R\mathop{\Join}\limits_{A=B}S=\sigma_{r[A]=s[B]}(R\times S) RA=BS=σr[A]=s[B](R×S)

自然连接(Natural Join)

  • 定义 R ⋈ S = σ r [ A i 1 , A i 2 , ⋯   , A i k ] = s [ A i 1 , A i 2 , ⋯   , A i k ] ( R × S ) R\mathop{\Join}S=\sigma_{r[A_{i_1},A_{i_2},\cdots,A_{i_k}]=s[A_{i_1},A_{i_2},\cdots,A_{i_k}]}(R\times S) RS=σr[Ai1,Ai2,,Aik]=s[Ai1,Ai2,,Aik](R×S)

关系的复杂扩展运算

除(Division)

  • 定义 R ÷ S = { t ∣ t ∈ Π R − S ( R ) ∧ ∀ u ∈ S , t u ∈ R } R\div S=\{t\mid t\in\Pi_{R-S}(R)\land\forall u\in S,tu\in R\} R÷S={ttΠRS(R)uS,tuR}
  • 性质 R ÷ S = Π R − S ( R ) − Π R − S ( ( Π R − S ( R ) × S ) − R ) R\div S=\Pi_{R-S}(R)-\Pi_{R-S}((\Pi_{R-S}(R)\times S)-R) R÷S=ΠRS(R)ΠRS((ΠRS(R)×S)R)

外连接(Outer Join)

外连接不易理解,先来看一个例子:


现有某公司的员工表和工资表,假设员工王五的工资正在商议。若想统计全体员工的工号、姓名和工资,可以使用自然连接运算: 员工 ⋈ 工资 \text{员工}\Join\text{工资} 员工工资,结果为:

由于王五未在工资表中存在记录,因此查询结果缺少员工王五,但这显然不是正确的结果。

当关系 R R R中某些元组在关系 S S S中不存在公共属性上值相等的元组时,这些 R R R中的元组将被舍弃,称这些被舍弃的元组为悬浮元组(Dangling Tuple)。

为了将悬浮元组保存在查询结果中,可以在其他属性上填充空值,定义这样的连接为外连接(Outer Join)。


特别地,如果只需将左值的悬浮元组保存在查询结果中,则使用左外连接(Left Join);如果只需将右值的悬浮元组保存在查询结果中,则使用右外连接(Left Join)。

  • 28
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值