数据库系统概论——关系代数详解
创始人
2024-05-20 02:22:16
0

文章目录

  • 1、关系代数概述
      • 1.1 传统的集合运算
      • 1.2 专门的关系运算
        • 1.2.1 选择运算
        • 1.2.2 投影(Projection)
        • 1.2.3 连接(Join)
        • 1.2.4 两类常用连接运算
        • 1.2.5 除(Division)

1、关系代数概述

关系代数是一种抽象的查询语言,是关系数据操纵语言的一种传统表达方式,它是利用对关系的运算来表达查询的。

任何运算都是将一定的运算符作用于一定的运算对象上,得到预期的运算结果。

关系代数的运算对象是关系,运算结果亦为关系。

运算符:

  • 集合运算符
    • 将关系看成元组的集合
    • 从关系的“水平”方向即行的角度来进行运算
  • 专门的关系运算符
    • 不仅涉及而且涉及
  • 算术比较符
    • 辅助专门的关系运算符进行操作
  • 逻辑运算符
    • 辅助专门的关系运算符进行操作

常见的关系运算符如下:
在这里插入图片描述

1.1 传统的集合运算

设关系RRR和关系SSS是相容的,ttt代表元组变量,现将各种运算分别介绍如下:

(1)并(Union)

  • 关系RRR与关系SSS的并记作:R∪S={t∣t∈R∨t∈S}R∪S=\{t|t∈R∨t∈S \}R∪S={t∣t∈R∨t∈S}
  • 结果关系是由属于RRR或属于SSS的元组组成,且结果仍为nnn目关系,但结果关系要消除重复元组。

举例:

RRR和SSS

  • 具有相同的目nnn(即两个关系都有n个属性)
  • 相应的属性取自同一个域

R∪SR∪SR∪S

  • 仍为nnn目关系,由属于RRR或属于SSS的元组组成
    • R∪S={t∣t∈R∨t∈S}R∪S=\{t|t∈R∨t∈S \}R∪S={t∣t∈R∨t∈S}

具体如下图所示:
在这里插入图片描述

(2)交( Intersection)

  • 关系RRR与关系SSS的交记作:R∩S={t∣t∈R∧t∈S}R∩S=\{t|t∈R∧t∈S \}R∩S={t∣t∈R∧t∈S}
  • 结果关系由既属于RRR又属于SSS的元组组成,且仍为nnn目关系。

举例:

RRR和SSS

  • 具有相同的目nnn
  • 相应的属性取自同一个域

R∩SR∩SR∩S

  • 仍为nnn目关系,由既属于RRR又属于SSS的元组组成
    • R∩S={t∣t∈R∧t∈S}R∩S=\{t|t∈R∧t∈S \}R∩S={t∣t∈R∧t∈S}

具体如下图所示:
在这里插入图片描述

(3)差(Difference)

  • 关系R与关系S的差记作:R−S={t∣t∈R∧t∉S}R-S=\{t|t∈R ∧t \notin S\}R−S={t∣t∈R∧t∈/S}
  • RRR和SSS的差,结果关系由属于RRR而不属于SSS的所有元组组成,且仍为nnn目关系,即在关系RRR中减去RRR和SSS的相同元组。

举例:

RRR和SSS

  • 具有相同的目nnn
  • 相应的属性取自同一个域

R−SR - SR−S

  • 仍为nnn目关系,由属于RRR而不属于SSS的所有元组组成
    • R−S={t∣t∈R∧t∉S}R-S=\{t|t∈R ∧t \notin S\}R−S={t∣t∈R∧t∈/S}

在这里插入图片描述

(4)广义笛卡尔积(Extended Cartesian Product)

  • 两个分别为 nnn目和mmm目的关系,RRR和SSS的广义笛卡尔积是一个(n+m)(n+m)(n+m)列的元组的集合。
  • 元组的前nnn列是关系RRR的一个元组,后mmm列是关系SSS的一个元组。若RRR有k1k_1k1​个元组,SSS有k2k_2k2​个元组,则关系RRR和关系SSS的广义笛卡尔积有k1×k2k_1×k_2k1​×k2​个元组。
  • 记作:R×S={(a1,a2,…am,b1,b2,…bn)∣(a1,a2,…am)∈R∧(b1,b2,…bn)∈S}。R×S=\{(a_1,a_2,…a_m,b_1,b_2,…b_n)| (a_1,a_2,…a_m) ∈R ∧ (b_1,b_2,…b_n) ∈ S\}。R×S={(a1​,a2​,…am​,b1​,b2​,…bn​)∣(a1​,a2​,…am​)∈R∧(b1​,b2​,…bn​)∈S}。

严格地讲应该是广义的笛卡尔积

  • RRR: nnn目关系,k1k_1k1​个元组
  • SSS: mmm目关系,k2k_2k2​个元组

R×SR×SR×S

  • 列:m+nm+nm+n列元组的集合

    • 元组的前nnn列是关系RRR的一个元组
    • 后mmm列是关系SSS的一个元组
  • 行:k1×k2k_1×k_2k1​×k2​个元组
    在这里插入图片描述
    具体如下图所示:
    在这里插入图片描述

1.2 专门的关系运算

在讲解之前,我们先引入几个记号,这样有助于下面的理解,确实关系代数后半部分有点难理解。
(1)R,t∈R,t[Ai]R,t\in R,t[A_i]R,t∈R,t[Ai​]
设关系模式为R(A1,A2,…,An)R(A_1,A_2,…,A_n)R(A1​,A2​,…,An​),它的一个关系设为RRR,t∈Rt\in Rt∈R表示ttt是RRR的一个元组,t[Ai]t[A_i]t[Ai​]则表示元组t中相应于属性AiA_iAi​的一个分量。

(2)trts⏞\overbrace{t_rt_s}tr​ts​​ , RRR为nnn目关系,SSS为mmm目关系。
tr∈R,ts∈S,trts⏞t_r\in R,t_s\in S, \overbrace{t_r t_s}tr​∈R,ts​∈S,tr​ts​​称为元组的连接。trts⏞\overbrace{t_r t_s}tr​ts​​是一个n+mn + mn+m列的元组,前nnn个分量为RRR中的一个nnn元组,后mmm个分量为SSS中的一个mmm元组。
(3)象集ZxZ_xZx​
给定一个关系R(X,Z)R(X,Z)R(X,Z),XXX和ZZZ为属性组。当t[X]=xt[X]=xt[X]=x时,xxx在RRR中的象集(Images Set)为:
Zx=t[Z]∣t∈R,t[X]=xZ_x={t[Z]|t \in R,t[X]=x}Zx​=t[Z]∣t∈R,t[X]=x

它表示RRR中属性组XXX上值为xxx的诸元组在ZZZ上分量的集合。

举例如下:
在这里插入图片描述
上面抽象的例子可能并不是特别容易理解,那么我们就拿生活中的实际例子进行解释:

学生-课程-选修关系:
学生关系Student、课程关系Course和选修关系SC

在这里插入图片描述
在上面的关系表中,我们可以把SC表看作一个关系R,它的属性组为学号,课程号以及成绩,即R(Sno,Cno,Grade)R(Sno, Cno, Grade)R(Sno,Cno,Grade)。这时我们将SC表与上面那个例子对比可以看出,Sno为200215121的学号在关系R(SC表)中的象集为Sno200215121={1,2,3}Sno_{200215121}=\{1,2,3\}Sno200215121​={1,2,3},以此类推,这样就比较容易理解一点。

1.2.1 选择运算

  • 选择又称为限制
  • 选择运算符的含义
    • 关系R上的选择操作是根据某些条件对关系R做水平分割,即从行的角度选择符合条件的元组。
  • 在关系R中选择满足给定条件的诸元组
    • 记作:σF(R)={t∣t∈R∧F(t)=‘真’}σF(R)=\{t|t∈R∧F(t)=‘真’\}σF(R)={t∣t∈R∧F(t)=‘真’}
  • F:选择条件,是一个逻辑表达式,取逻辑值“真”或“假”。
  • 选择运算是从关系R中选取使逻辑表达式F为真的元组,是从行的角度进行的运算

在这里插入图片描述

F:选择条件,是一个逻辑表达式

  • 基本形式为:X1θY1X_1θY_1X1​θY1​
  • θθθ:比较运算符(>,≥,<,≤,=或<>)(>,≥,<,≤,=或<>)(>,≥,<,≤,=或<>)
  • X1,Y1X_1,Y_1X1​,Y1​:属性名、常量、简单函数.
  • 属性名也可以用它的序号来代替;

以最上面的学生-课程-选修关系表举例说明更好理解:

[例1] 查询信息系(IS系)全体学生

σSdept=′IS′(Student)或σ5=′IS′(Student)σ_{Sdept} = 'IS' (Student) 或 σ_5 ='IS'(Student)σSdept​=′IS′(Student)或σ5​=′IS′(Student)

结果:
在这里插入图片描述

[例2] 查询年龄小于20岁的学生
σSage<20(Student)或σ4<20(Student)σ_{Sage< 20}(Student) 或 σ_{4 < 20}(Student)σSage<20​(Student)或σ4<20​(Student)

结果:
在这里插入图片描述

1.2.2 投影(Projection)

投影运算符的含义:

  • 从R中选择出若干属性列组成新的关系
    • πA(R)=t[A]∣t∈Rπ_A(R) = { t[A] | t \in R }πA​(R)=t[A]∣t∈R
    • A:R中的属性列

投影操作主要是从列的角度进行运算:
在这里插入图片描述
但投影之后不仅取消了原关系中的某些列,而且还可能取消某些元组(避免重复行)

举例说明一下:
[例3] 查询学生的姓名和所在系
即求Student关系上学生姓名和所在系两个属性上的投影

πSname,Sdept(Student)或π2,5(Student)π_{Sname,Sdept}(Student) 或 π_{2,5}(Student)πSname,Sdept​(Student)或π2,5​(Student)

结果:
在这里插入图片描述
[例4] 查询学生关系Student中都有哪些系

πSdept(Student)π_{Sdept}(Student)πSdept​(Student)

结果:
在这里插入图片描述
由此可见,使用投影操作可以将关系表中的列单独拿出来组成新的关系表,这样方便我们可以更加清楚的查看自己想要的信息。

1.2.3 连接(Join)

连接也称为θθθ连接

连接运算的含义:
从两个关系的笛卡尔积中选取属性间满足一定条件的元组
在这里插入图片描述
连接运算从R和SR和SR和S的广义笛卡尔积R×SR×SR×S中选取(RRR关系)在AAA属性组上的值与(SSS关系)在BBB属性组上值满足比较关系θθθ的元组

举例说明一下:
[例5]关系R和关系S 如下所示:
在这里插入图片描述
在这里插入图片描述

1.2.4 两类常用连接运算

(1)等值连接(equijoin)

  • 什么是等值连接?
    • θ为“=”的连接运算称为等值连接
  • 等值连接的含义
    • 从关系R与S的广义笛卡尔积中选取A、B属性值相等的
      那些元组,即等值连接为:
      在这里插入图片描述
      举例说明:
      在这里插入图片描述
      在这里插入图片描述
      (2)自然连接(Natural join)
  • 自然连接是一种特殊的等值连接
    • 两个关系中进行比较的分量必须是相同的属性组
    • 在结果中把重复的属性列去掉
  • 自然连接的含义
    • R和S具有相同的属性组B

在这里插入图片描述
举例:
在这里插入图片描述
在这里插入图片描述
一般的连接操作是从行的角度进行运算。
在这里插入图片描述
自然连接还需要取消重复列,所以是同时从行和列的角度进行运算。

1.2.5 除(Division)

给定关系R(X,Y)R (X,Y)R(X,Y)和S(Y,Z)S (Y,Z)S(Y,Z),其中X,Y,ZX,Y,ZX,Y,Z为属性组。RRR中的YYY与SSS中的YYY可以有不同的属性名,但必须出自相同的域集。RRR与SSS的除运算得到一个新的关系P(X)P(X)P(X),PPP是RRR中满足下列条件的元组在 XXX 属性列上的投影:

元组在XXX上分量值xxx的象集YxY_xYx​包含SSS在YYY上投影的集合,记作:
在这里插入图片描述
关于象集的概念我们在前面已经提到了,在此直接举例子说明除:

[例6]设关系R、SR、SR、S分别为下图的(a)和(b),R÷SR÷SR÷S的结果为图©

在这里插入图片描述

通过上面的结果我们可以发现,关系RRR中的B、CB、CB、C属性组,和关系SSS中的B、CB、CB、C属性组的域都是相同的,R与SR与SR与S的除运算得到了一个新的关系,我们将它当做P(A)P(A)P(A),PPP是RRR中满足上述条件的元组在AAA属性列中的投影。

分析:
设关系R,SR,SR,S,分别为例6中的(a)和(b),R÷SR÷SR÷S的结果为图©,关系RRR中AAA可以取四个值{a1,a2,a3,a4},\{ a_1,a_2,a_3,a_4\},{a1​,a2​,a3​,a4​}, 其中:

  • a1a_1a1​的象集为{(b1,c2),(b2,c1),(b2,c3)}\{(b_1,c_2),(b_2,c_1),(b_2,c_3)\}{(b1​,c2​),(b2​,c1​),(b2​,c3​)}
  • a2a_2a2​的象集为{(b3,c7),(b2,C3)}\{(b_3,c_7),(b_2,C_3)\}{(b3​,c7​),(b2​,C3​)}
  • a3a_3a3​的象集为{(b4,c6)}\{ (b_4,c_6) \}{(b4​,c6​)}
  • a4a_4a4​的象集为{(b6,c6)}\{(b_6,c_6)\}{(b6​,c6​)}

SSS在(B,C)(B,C)(B,C)上的投影为{(b1,c2),(b2,c1),(b2,c3)}\{(b_1,c_2),(b_2,c_1),(b_2,c_3)\}{(b1​,c2​),(b2​,c1​),(b2​,c3​)}

显然只有a1a_1a1​的象集包含了SSS在(B,C)(B,C)(B,C)属性组上的投影,所以R÷S={a1}R÷S=\{a1\}R÷S={a1}。

除操作是同时从行和列角度进行运算
在这里插入图片描述

📢博客主页:https://blog.csdn.net/m0_63007797?spm=1011.2415.3001.5343
📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
📢本文由 心无旁骛~ 原创,首发于 CSDN博客🙉
📢停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨

相关内容

热门资讯

【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
AsusVivobook无法开... 首先,我们可以尝试重置BIOS(Basic Input/Output System)来解决这个问题。...
ASM贪吃蛇游戏-解决错误的问... 要解决ASM贪吃蛇游戏中的错误问题,你可以按照以下步骤进行:首先,确定错误的具体表现和问题所在。在贪...
月入8000+的steam搬砖... 大家好,我是阿阳 今天要给大家介绍的是 steam 游戏搬砖项目,目前...