【数据库基础】 几种基本的关系代数运算方法

关系代数是一种抽象的查询语言,用对关系的运算来表达查询,作为研究关系数据语言的数学工具。1

基本的关系代数算法

传统的集合运算

∪ \cup

  1. 要求:参与并运算的两张关系表必须具有相同的属性(列名);
  2. 运算方法:选取R、S关系表中的所有元组合并,建立新表;
  3. 表达式:
    R ∪ S = { i ∣ i ∈ R ∨ i ∈ S } . R \cup S = \{ i|i \in R \vee i \in S\}. RS={iiRiS}.
    RcupS

∩ \cap

  1. 要求:参与交运算的两张关系表必须具有相同的属性(列名);
  2. 运算方法:选取R、S关系表中的所有相同元组,建立新表;
  3. 表达式:
    R ∩ S = { i ∣ i ∈ R ∧ i ∈ S } . R \cap S = \{ i | i \in R \wedge i \in S \}. RS={iiRiS}.
    RcapS

− -

  1. 要求:参与交运算的两张关系表必须具有相同的属性(列名);
  2. 运算方法:选取R表中与S表中任意元组不同的元组,建立新表;
  3. 表达式:
    R − S = { i ∣ i ∈ R ∧ i ∉ S } . R - S = \{ i | i \in R \wedge i \notin S \}. RS={iiRi/S}.
    R-S

笛卡尔积(广义) × \times ×

  1. 要求:R表和S表可以拥有不同的属性(列);
  2. 运算方法:R的每一行元组后面都要跟随S的所有元组;
  3. 表达式:
    R × S = { i R i S ^ ∣ i R ∈ R ∧ i S ∈ S } . R \times S = \{ \widehat{i_R i_S} | i_R \in R \wedge i_S \in S \}. R×S={iRiS iRRiSS}.
    RtimesS

专门的集合运算

选择 σ \sigma σ

  1. 要求:拥有一个基于R表中属性A(列A)的逻辑表达式F;
  2. 运算方法:从R表中选择符合逻辑表达式F的元组(行),建立新表;
  3. 表达式:
    F ( i ) = i [ A ]   θ   a ( θ 为比较运算符 , 可为 > , < , ≥ , ≤ , = 或 ≠ ) , σ F ( R ) = { i ∣ i ∈ R ∧ F ( i ) } . F(i)=i[A]\,\theta\,a \\ (\theta 为比较运算符,可为>,<,\geq,\leq,=或\neq),\\ \sigma_F(R)= \{ i | i \in R \wedge F(i)\}. F(i)=i[A]θa(θ为比较运算符,可为>,<,,,==),σF(R)={iiRF(i)}.
    Select

投影 π \pi π

  1. 要求:所选的属性组A,B必须来源于R表的属性(列名);
  2. 运算方法:从R表中选择指定的属性组(列),建立新表;
  3. 表达式:
    π A , B ( R ) = { i [ A , B ] ∣ i ∈ R } . \pi_{A,B}(R)= \{ i[A,B] | i \in R \}. πA,B(R)={i[A,B]iR}.
    Project
象集(选择+投影)
  1. 要求:所选的具体属性值a必须来源于R表中存在的属性(列);
  2. 运算方法:从R表中选择指定的属性值a所在的行,投影出剩下的其他属性Z,建立新表;
  3. 表达式:
    π Z ( σ A = a ( R ) ) = { i [ Z ] ∣ i ∈ R ∧ i [ A ] = a } . \pi_{Z}(\sigma_{A=a}(R))= \{ i[Z] | i \in R \wedge i[A]=a \}. πZ(σA=a(R))={i[Z]iRi[A]=a}.
    Image

连接 ⋈ \bowtie

  1. 要求:A、B属性组(列)必须分别为R表和S表中的属性,且具有可比性(如皆为日期属性、数值属性等);
  2. 运算方法:先使用广义笛卡尔积(见上文)算出R × \times ×S,再在R × \times ×S中选取符合逻辑表达式F的元组,建立新表;
  3. 表达式:
    F ( i ) = i R [ A ]   θ   i S [ B ] ( θ 为比较运算符 , 可为 > , < , ≥ , ≤ , = 或 ≠ ) , R ⋈ F S = { i R i S ^ ∣ i R ∈ R ∧ i S ∈ S ∧ F ( i ) } . F(i)=i_R[A] \,\theta\, i_S[B]\\ (\theta 为比较运算符,可为>,<,\geq,\leq,=或\neq),\\ R\mathop{\bowtie}\limits_{F} S=\{\widehat{i_Ri_S} | i_R \in R \wedge i_S \in S \wedge F(i) \}. F(i)=iR[A]θiS[B](θ为比较运算符,可为>,<,,,==),RFS={iRiS iRRiSSF(i)}.
    Connect
等值连接
  1. 要求:在满足连接要求的前提下,逻辑表达式F中的   θ   \,\theta\, θ为“   =   \,=\, =”;
  2. 运算方法:先使用广义笛卡尔积(见上文)算出R × \times ×S,再在R × \times ×S中选取表R的属性A与表S的属性B值相等的元组,建立新表;
  3. 表达式:
    R ⋈ A = B S = { i R i S ^ ∣ i R ∈ R ∧ i S ∈ S ∧ i R [ A ] = i S [ B ] } . R\mathop{\bowtie}\limits_{A = B} S=\{\widehat{i_Ri_S} | i_R \in R \wedge i_S \in S \wedge i_R[A] = i_S[B] \}. RA=BS={iRiS iRRiSSiR[A]=iS[B]}.
    eqConnect
自然连接
  1. 要求:在满足连接要求的前提下,R表和S表中必须要有至少一个相同的属性C(列C);
  2. 运算方法:先使用广义笛卡尔积(见上文)算出R × \times ×S(即下图中右侧较大的整个表),再在R × \times ×S中选取两表中属性C值 相等 的元组,建立新表,并删除重复的相同属性组,仅保留一组即可
  3. 表达式:
    R ⋈ S = { i R i S ^ ∣ i R ∈ R ∧ i S ∈ S ∧ i R [ A ] = i S [ A ] } . R\bowtie S=\{\widehat{i_Ri_S} | i_R \in R \wedge i_S \in S \wedge i_R[A] = i_S[A] \}. RS={iRiS iRRiSSiR[A]=iS[A]}.naturalConnect

÷ \div ÷

  1. 要求:在满足连接要求的前提下,R表和S表中必须要有相同的属性A(列A);
  2. 运算方法:寻找S表中与R表相同的属性组X(列),在R表中寻找匹配S表属性的元组,选取含有S表中属性组X的所有属性的R表元组,再对选出的元组做关于属性X的象集(见上文)得到;
    *具体算法建议参考 关系代数运算——除法运算_Jack浩2
  3. 表达式:
    R ÷ S = { i R ( X ) ∣ i R ∈ R ∧ π Y ( S ) ⊆ Y X } ( Y X = π Z ( σ X = i R [ X ] ( R ) ) ) . R\div S=\{i_R(X) | i_R \in R \wedge \pi_Y(S) \subseteq Y_X \}\\(Y_X=\pi_{Z}(\sigma_{X=i_R[X]}(R))). R÷S={iR(X)iRRπY(S)YX}(YX=πZ(σX=iR[X](R))).
    div

以上大部分整理 来源于《数据库系统概论(第5版)》高等教育出版社3,如有问题请不吝赐教,谢谢

Refences


  1. 关系代数_百度百科 ↩︎

  2. 关系代数运算——除法运算_Jack浩 ↩︎

  3. 《数据库系统概论(第5版)》_高等教育出版社 ↩︎

评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学渣戊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值