【数据库系统 -3】关系代数

本节是关系型数据库的数学基石——关系代数。所谓关系代数,本质是一种抽象查询语言,用对关系的运算来表达查询。任何关系运算的输出总是一个关系。关系代数描述了关系之间的数学运算,是SQL语句查询的基础,虽然相对鼓枯燥一些,但却重要。说白了,内容其实也不多,重点掌握一些运算,且能解决一些查询问题即可。

传统的关系运算

传统关系运算,其实就是离散数学-集合中所学的一些运算:并、差、交、笛卡尔积。

学过集合论的都觉得并非常简单,确实如此。对关系代数来说,两个元组(假设为R和S)要进行并运算,需要满足一些要求:

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

数学形式表达为:R∪S = { t | t ∈ R∨t ∈S }

例如,有如下的R关系:
在这里插入图片描述
有如下的S关系:
在这里插入图片描述
则R∪S的结果关系为:
在这里插入图片描述

两个关系进行差运算,需要满足的条件和并运算时一样的:

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

数学形式表达为:R -S = { t | t∈R∧t ∉ S }

如果R和S关系还是和上面一样,则R-S的结果集为:
在这里插入图片描述

两个关系进行交运算,需要满足的条件和并运算时一样的:

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

数学形式表示为:

  • R∩S = { t | t ∈ R∧t ∈S }
  • R∩S = R –(R-S)=S -(S-R)

如果R和S关系还是和上面一样,则R∩S的结果集为:
在这里插入图片描述

笛卡尔积

设R为n目关系,有k1个元组,S为为m目关系,有k2个元组,则R x S的结果关系为:

  • 列:(n+m)列元组的集合
  • 行:k1×k2个元组

数学形式表达为:
在这里插入图片描述
如果R和S关系还是和上面一样,则R x S的结果集为:
在这里插入图片描述

笛卡尔积如果运用在实际例子上,会有很多元组是冗余的。需要我们对笛卡尔积的关系进行进一步筛选,涉及到后面知识。

这里简单提一下SQL,SQL对并、差、交、笛卡尔积都提供了支持(注意我这里说SQL,并不指MySQL)。

  • 并:select * from A union B
  • 差:select * from A except B
  • 交:select * from A intersect B
  • 笛卡尔积:select * from A, B

注:MySQL并无except和intersect的用法。

专门的关系运算

专门关系运算包括:选择、投影、连接和除运算。我们需要先引入几个记号,便于后续说明。

在这里插入图片描述

最后一个概念是象集,可以结合离散数学的象理解:给定一个关系R(X,Z),X和Z为属性组。当t[X]=x时,x在R中的象集为:Zx={ t[Z] | t ∈R,t[X]=x},表示R中属性组X值为x的诸元组在Z上分量的集合。

选择

选择,就是要将符合条件的元组(从行的角度)筛选出来,其数学形式表达如下:σF( R ) = {t | t∈R∧F(t)= ‘真’},一般来说,选择的条件是bool类型的运算符,包括<,>,=,<>等,bool表达式的连接可以采用上面讲过的传统关系运算符。

投影

所谓投影,就是从列的角度出发,从R中选择出若干属性列组成新的关系。其数学形式表达如下:πA( R ) = { t[A] | t ∈R }

连接(θ连接)

连接,顾名思义就是连接多个关系结果进行运算,多个关系结果可以怎么得到?通过笛卡尔积运算即可获得。
连接运算就是要从两个关系的笛卡尔积中选取属性间满足一定条件的元组,数学形式如下:
在这里插入图片描述
其中,

  • A和B:分别为R和S上度数相等且可比的属性组
  • θ:比较运算符

在连接运算中,有两种特殊的重要连接类型:
第一类是等值连接,也就是θ为=的情况,从关系R与S的广义笛卡尔积中选取A、B属性值相等的那些元组。
对等值连接来说,SQL语句可以有如下的书写方式:
select * from A, B where A.x = B.y
select * from A join B on A.x = B.y
select * from A inner join B on A.x = B.y
平时见到第一种的情况比较多。

第二类是自然连接。在等值连接中,会出现分量相同的情况,而自然连接就是自然地将这些重复冗余的分量去除。且自然连接规定了两个关系中进行比较的分量必须是相同的属性组。其数学形式如下:
在这里插入图片描述
对自然连接来说,SQL语句可以有如下的书写方式:
select * from A natural join B

下面是连接运算的一些例子,假设有如下的R和S关系表:
在这里插入图片描述
在这里插入图片描述
在连接A关系表和B关系表的时候,并不是总是能找到A关系表的一项,与B关系表的某一项对应,就像上面自然连接,R的(a2, b4,12)就在连接中消失了,这种元组我们把它称作悬浮元组。因此,给悬浮元组的定义是:两个关系R和S在做自然连接时,关系R中某些元组有可能在S中不存在公共属性上值相等的元组,从而造成R中这些元组在操作时被舍弃了,这些被舍弃的元组称为悬浮元组。

根据对悬浮元组处理方式的不同,自然连接又分为:

  • 外连接:把悬浮元组也保存在结果关系中,而在其他属性上填空值(Null)
  • 左外连接:只保留左边关系R中的悬浮元组
  • 右外连接:只保留右边关系S中的悬浮元组

对外连接来说,SQL语句可以有如下的书写方式:
select * from A (left / right) outer join B on A.x = B.y

对于上面R和S关系表来说,
在这里插入图片描述

除运算,最初学习起来相对没有那么直观。我们一步步来建立概念:

  • 规定关系R (X,Y) 和S (Y,Z),其中X,Y,Z为属性组。R中的Y与S中的Y可以有不同的属性名,但必须出自相同的域集。
  • 除运算得到的仍然是一个关系
  • 这个关系的元组在X上分量值x 的象集Yx包含S在Y上投影的集合
  • 数学形式表达为:
    在这里插入图片描述
    来看一个简单例子,假设R和S关系表如下:
    在这里插入图片描述
    R和S具有相同的属性B和C,除运算要做的事情如下:
  • 找出S中(B,C)集合,为{ ( b1, c2 ), ( b2, c1 ), ( b2, c3 ) }
  • 对于R中的每个Ai,找到其各自对应的象集,使得这个象集包含{ ( b1, c2 ), ( b2, c1 ), ( b2, c3 ) }
  • 只有a1的象集包含了{ ( b1, c2 ), ( b2, c1 ), ( b2, c3 ) },因此除法的结果如下:
    在这里插入图片描述

关于关系代数,我们就介绍这么多。关系代数,说难不难,说容易也不容易,关键还是得多思考,勤做题,保持关系运算,特别是专门关系运算的感觉。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值