• 关系型数据库(二)---关系代数



    前言

    本文主要讲解了关系代数


    一、关系代数

    1.关系操作

    关系操作是集合操作,操作的对象及结果都是集合,是一次一集合(Set-at-a-time)的方式。而非关系型的数据操作方式是一次一记录(Record-at-a-time)
    在这里插入图片描述
    关系模型与其他模型相比,最有特色的是它的数据库语言。这种语言灵活方便、表达能力和功能都很强。

    目前关系数据库所使用的语言一般都具有定义、查询、更新和控制一体化的特点,而查询是最主要的部分

    所以说,关系数据库的核心部分是查询,故又称为查询语言,而查询的条件要使用关系运算表达式来表示。

    因此,关系运算是设计关系数据语言的基础。

    按表达查询的方法不同,关系运算可分为关系代数关系演算两大类。

    2.关系代数

    关系代数是一种抽象的查询语言,它用对关系的运算来表达查询

    关系代数

    1.运算对象是关系
    2.运算结果亦为关系
    
    • 1
    • 2

    关系代数的运算符有两类:集合运算符专门的关系运算符
    传统的集合运算是从关系的“水平”方向即行的角度进行,专门的关系运算不仅涉及行而且涉及列

    二、集合运算

    传统集合运算 :

    1.并
    2.差
    3.交
    4.笛卡尔积
    
    • 1
    • 2
    • 3
    • 4

    专门的关系运算:

    1.选择运算 
    2.投影运算 
    3.连接运算 
    4.除运算
    
    • 1
    • 2
    • 3
    • 4

    1.传统集合运算

    (1)并运算

    在这里插入图片描述

    所有至少出现在两个关系中之一的元组集合。
    R ⋃ S = { t ∣ t ∈ R ∪ ∈ t ∈ S } R\bigcup S =\{ t | t\in R\cup \in t\in S \} RS={ttRtS}
    两个关系R和S若进行并运算,则它们必须是相容的:

    1.关系R和S必须是同元的,即它们的属性数目必须相同。
    2.对任意i,R的第i个属性的域必须和S的第i个属性的域相同。
    
    • 1
    • 2

    在这里插入图片描述

    (2)差运算

    在这里插入图片描述

    设关系R和S具有相同的关系模式,R和S的差是由属于R但不属于S的元组构成的集合,记为:

    R − S = { t ∣ t ∈ R ∩ t ∉ S } R-S =\{ t | t\in R\cap t\notin S \} RS={ttRt/S}
    R与S必须是相容的

    在这里插入图片描述

    (3)交运算

    在这里插入图片描述
    既属于R又属于S的元组。记为:
    R ∩ S = { t ∣ t ∈ R ∩ t ∈ S } R\cap S =\{ t | t\in R \cap t\in S \} RS={ttRtS}

    关系的交可以用差来表示,即
    R ∈ S = R − ( R − S ) R \in S = R -(R - S) RS=R(RS)
    在这里插入图片描述

    (4)笛卡儿积

    两个分别为n目和m目的关系R和S的笛卡尔积是一个 ( n + m ) (n+m) (n+m)列的元组的集合。元组的前n列是关系R的一个元组,后m列是关系S的一个元组。若R有 k 1 k_1 k1个元组,S有 k 2 k_2 k2个元组,则关系R和关系S的笛卡尔积有 k 1 × k 2 k_1\times k_2 k1×k2个元组。记为:
    R × S = { t r t s ^ ∣ t r ∈ R ∩ t s ∈ S } R\times S=\{\widehat{t_rt_s}|t_r\in R\cap t_s\in S\} R×S={trts trRtsS}
    R × S R\times S R×S的度为R与S的度之和,
    R × S R\times S R×S的元组个数为R和S的元组个数的乘积。
    在这里插入图片描述

    2.专门的关系运算

    (1)选择运算

    从关系中找出满足给定条件的所有元组。
    δ F ( R ) = { t ∣ t ∈ R , F ( t ) = ‘真’ } \delta_F(R)=\{t | t\in R , F(t) = ‘真’\} δF(R)={ttR,F(t)=}
    从行的角度进行的运算,即水平方向抽取元组。

    在这里插入图片描述
    经过选择运算得到的结果可以形成新的关系,其关系模式不变, 但其中元组的数目小于或等于原来的关系中的元组的个数,它是原关系的一个子集。

    (2)投影运算

    从关系中挑选若干属性组成的新的关系 。
    Π A ( R ) = { t [ A ] ∣ t ∈ R } , A ⊆ R \Pi_A(R) = \{ t[A] | t\in R \} , A\subseteq R ΠA(R)={t[A]tR},AR
    从列的角度进行的运算,即垂直方向抽取元组。
    投影的结果中要去掉相同的行。

    在这里插入图片描述

    (3)连接运算

    从两个关系的笛卡尔积中选取属性间满足一定条件的元组
    R ⋈ A θ B S = { t r t s ^ ∣ t r ∈ R ∩ t s ∈ S ∩ t r [ A ] θ t s [ B ] } θ 为算术运算 , 为等号时称为等值连接。 A , B 为 R 和 S 上度数相等且可比的属性列。 R\Join_{A\theta B} S = \{\widehat{t_rt_s}|t_r\in R\cap t_s\in S\cap t_r[A]\theta t_s[B] \} \theta为算术运算,为等号时称为等值连接。 A,B为R和S上度数相等且可比的属性列。 RAθBS={trts trRtsStr[A]θts[B]}θ为算术运算,为等号时称为等值连接。A,BRS上度数相等且可比的属性列。
    从定义上可以看出联接运算就是在两个关系的笛卡尔积上进行的选择运算。

    条件连接

    关系R和S,求 R ⋈ C = E S R \Join_{C=E}S RC=ES

    下表为R
    R
    下表为S
    在这里插入图片描述
    结果为:
    在这里插入图片描述

    等值连接

    θ为“=”的连接运算称为等值连接

    有:

    自然连接(Natural join)(特殊)
    左连接(Left Join)
    右连接(Right Join)
    
    • 1
    • 2
    • 3
    自然连接

    操作步骤:

    1.选择同时出现在R和S中属性相等元组;
    2.去掉重复属性。    
    
    • 1
    • 2

    可以看出,如果两个关系没有公共属性,自然连接就是笛卡尔积。
    下表为R
    R
    下表为S
    在这里插入图片描述
    结果为:
    在这里插入图片描述

    左连接与右连接

    左连接(Left Join)
    R左连接S:所有来自R的元组和那些连接字段相等处的S的元组。

    右连接(Right Join)
    R右连接S:所有来自S的元组和那些连接字段相等处的R的元组。

    表R:
    在这里插入图片描述

    表S:
    在这里插入图片描述
    R左连接S的结果为:

    R.B=S.B ∧ R.C=S.C

    在这里插入图片描述

    R右连接S的结果为:
    R.B=S.B ∧ R.C=S.C
    在这里插入图片描述

    (4)除运算

    象极

    给定一个关系R(X,Z),X和Z为属性组。当t[X]=x时,x在R中的象集(Images Set)为:
    Z x = { t [ Z ] ∣ t ∈ R , t [ X ] = x } Z_x=\{t[Z]|t\in R,t[X]=x\} Zx={t[Z]tR,t[X]=x}
    它表示R中属性组X上值为x的诸元组在Z上分量的集合。

    关系R中,A可以取四个值{a1,a2,a3,a4}:

        a1的象集为 {(b1,c2),(b2,c3),(b2,c1)}
     	a2的象集为 {(b3,c7),(b2,c3)}
    	a3的象集为 {(b4,c6)}
     	a4的象集为 {(b6,c6)}
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    运算

    给定关系R(X,Y)和S(Y,Z),其中X,Y,Z为属性组。R中的Y与S中的Y可以有不同的属性名,但必须出自相同的域集。R与S的除运算得到一个新的关系P(X),P是R中满足下列条件的元组在X属性列上的投影:元组在X上分量值x的象集 Y x Y_x Yx包含S在Y上投影的集合。

    R ÷ S = { t r [ X ] ∣ t r ∈ R ∩ π Y ( S ) ⊆ Y x } Y x : x 在 R 中的象集, x = t r [ X ] R÷S =\{t_r [X] | t_r \in R\cap \pi_Y (S) \subseteq Y_x \} \\Y_x:x在R中的象集,x = t_r[X] R÷S={tr[X]trRπY(S)Yx}YxxR中的象集,x=tr[X]
    在这里插入图片描述

    例子1

    R1表:
    在这里插入图片描述

    R2表:
    在这里插入图片描述

    R1÷R2的结果:
    在这里插入图片描述

    例子2

    在这里插入图片描述

    3.查询优化

    将一个关系代数表达式转换为另一个具有较高效率的关系代数表达式的过程称为“查询优化”。

    (1)优化准则

    ① 提早执行选择运算。
    ② 合并笛卡尔积与其后的选择运算为连接运算。
    ③ 将投影运算与其后的其他运算同时进行,以避免重复扫描关系。
    ④ 将投影运算和其前后的二目运算结合起来,以避免为去掉某些字段再扫描一遍关系。
    ⑤ 执行连接前对关系适当地预处理.就能快速地找到要连接的元组。
    ⑥ 存储公共子表达式。


    总结

    文章的不妥之处请读者包涵指正

  • 相关阅读:
    【计算机网络篇】数据链路层(12)交换机式以太网___以太网交换机
    Maple希腊字母按键查表
    NET:Spire.XLS 12.11.3 supports a variety of new formulas
    4.2 Serializable Concept
    Java知识梳理 第八章 面向对象编程(中级部分)
    关于 CMS 垃圾回收器,你真的懂了吗?
    jdk7新增时间类Date,SimpleDateFormat,Calendar
    高并发Server的基石:reactor反应堆模式
    如何通过优化 Python 中的 GPU 使用率将视频处理速度提高 5 倍(教程含源码)
    【Leetcode】1444. Number of Ways of Cutting a Pizza
  • 原文地址:https://blog.csdn.net/weixin_52042488/article/details/126924693