数据库原理(八)- 关系代数

前言

关系代数是一种抽象得抽象语言,它用作对关系德运算来表达查询。
任何一种运算都是讲一定的运算符作用与一定得运算对象上,得到预期的运算结果。所以运算对象、运算符、运算结果是运算的三大要素,而关系运算符分为传统运算符专门运算符,如下图:

在这里插入图片描述

传统的集合运算

传统的集合运算属于二目运算,包括并、差、交、笛卡尔积4种运算。
我们首先假设有R和S两种关系,且相应的属性取自同一个域,t是元组变量,t∈R表示t是R的一个元组

R表:

ABC
a1b1c1
a1b2c2
a2b2c1

S表:

ABC
a1b2c2
a1b3c2
a2b2c1
并(union)

并的关系表达式为:

 R∪S={t|t∈R∨t∈S}

我们将两张表代入关系表达式,得出以下结果:

R∪S

ABC
a1b1c1
a1b2c2
a2b2c1
a1b3c2

可知,并操作是将两张表的数据整合,消除重复列

差(except)

差的关系表达式为:

R-S={t|t∈R∧t∉ S}

将两张表代入关系表达式,得出以下结果

R-S

ABC
a1b1c1

假如倒转一下,得出一下结果

S-R

ABC
a1b3c2

可知,差操作是将被减表的数据去除,只保留减表的特有数据

交(intersection)

交的关系表达式为:

关系表达式 R∩S={t|t∈R∧t∈S}

将两张表代入关系表达式,得出下结果

R∩S

ABC
a1b2c2
a2b2c1

可知,交操作是将两张表的交集数据输出

笛卡尔积(cartesian product)

笛卡尔积的关系表达式为

R×S={tr ts|tr∈R∧ts∈S}

将两张表代入关系表达式,得出以下结果

R×S

ABCABC
a1b1c1a1b2c2
a1b1c1a1b3c2
a1b1c1a2b2c1
a1b2c2a1b2c2
a1b2c2a1b3c2
a1b2c2a2b2c1
a2b2c1a1b2c2
a2b2c1a1b3c2
a2b2c1a2b2c1

可知,笛卡尔积的操作就是将乘表的所有元组与被乘表的元组都匹配一遍

专门的集合运算

专门的集合运算包括选择、投影、连接和除运算等,我们先给出几张表,等下在进行集合运算中更加清晰

学生表(student)

学号姓名性别年龄所在系
20170901赵一20cs
20170902钱二20cs
20170903张三19ma

课程表(course)

课程号课程名先行课学分
1数据库14
2数学12
3信息系统24

成绩表(sc)

学号课程号成绩
20170901182
20170902192
20170902285
20170903390
选择(selection)

选择又称为限制,它在关系R中选择满足给定条件的诸元组,记作

σF(R)={t|t∈R∧F(t)='真'}

其中F表示选择条件,它是一个逻辑表达式,取逻辑值”真“或”假“。

逻辑表达式F的基本形式为:

X₁θY₁ 其中θ表示为条件运算符,可以是 >、 ≧、<、 ≦、 = 和 <>(不等于)

举个例

查询年龄等于20岁的学生
σ 年龄列 = 20(学生表) // = 就是应用在关系式中的条件运算符

查询结果

学号姓名性别年龄所在系
20170901赵一20cs
20170902钱二20cs

在基本的选择条件之上还可以进一步的进行逻辑运算(∧与、∨或、¬非),比如

查询一个年龄等于20的男生
σ 年龄列 = 20(学生表) a ∧性别列 = 男(学生表)

查询结果

学号姓名性别年龄所在系
20170901赵一20cs
投影(projection)

关系R上的投影是从R中选择若干属性列组成新的关系。记作

∏a(R)={t[A]}|t∈R}

其中A为R的属性列,投影操作是从列的角度进行的运算

举个例子

查询学生表中所有学生的学号和姓名
∏ 学号,姓名(学生表)

查询结果

学号姓名
20170901赵一
20170902钱二
20170903张三
连接(join)

连接也称为θ连接,它是从两个关系的笛卡尔积中选取属性间满足一定条件的元组
这里假设两个关系,关系中有某些属性列相同,且值取自同一域

R

ABC
a1b15
a1b26
a2b38
a2b412

S

BE
b13
b27
b310
b32
b52
一般连接

在一般连接上,A和B分别为R和S上列数相等且可比的属性组θ为比较运算符,记作
在这里插入图片描述
举个例子

输出 R⋈S 且C<E的元组

结果为

AR.BCS.BE
a1b15b27
a1b15b310
a1b26b27
a1b26b310
a2b38b310
等值连接 (equijoin)

θ为“=”的连接运算称为等值连接。它是从关系R与S的广义笛卡尔积中选取A、B属性组值相等的那些元组,记作
在这里插入图片描述
举个例子

R⋈S,且R.B=S.B

结果为

AR.BCS.BE
a1b15b13
a1b26b27
a2b38b310
a2b38b32

等值连接会去除属性列不相等的元组

自然连接(natural join)

自然连接是一种特殊的等值连接。它要求两个关系中进行比较的分量必须是同名的属性组,并在结果中把重复的属性列去掉,记作
在这里插入图片描述
举个例子

自然连接 R⋈S

结果为

ABCE
a1b153
a1b267
a2b3810
a2b382
外连接 (outer join)

两个关系自然连接时,选择两个关系的公共属性上的值相等的元组构成新的关系,而那些公共属性上的值不相等的元组就会被舍弃,这些被舍弃的元组称为悬浮元组
如果把悬浮元组也保存在结果关系中,而在其他属性填空值(null),那么这种连接就叫做外连接

如R外连接S,结果为

ABCE
a1b153
a1b267
a2b3810
a2b382
a2b412null
nulb5null2
左外连接 (left outer join)

如果只保留左边关系R中的悬浮元组就叫做左外连接,如R⋊S,结果为

ABCE
a1b153
a1b267
a2b3810
a2b382
a2b412null
右外连接 (right outer join)

如果只保留右边关系S中的悬浮元组就叫做右外连接,如R⋉S,结果为

ABCE
a1b153
a1b267
a2b3810
a2b382
nulb5null2
除运算(division)

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

R÷S={tr [X]|tr∈R∧∏y(S)⊆Yx}

举个列子,这里先列出两张表
R

ABC
a1b1c2
a1b2c1
a2b3c1
a2b4c6

S

BCD
a1b1d1
a1b2d2

R÷S 解法

在关系R中,A可以取2个值{a1,a2}.其中:
a1的象集为{(b1,c2),(b2,c1)}
a2的象集为{(b3,c1),(b4,c6)}
S在(B,C)上的投影为{(a1,b1),(a1,b2)}
显然只有a1的象集(B,C)a₁包含了S在(B,C)属性组上的投影,所以R÷S={a₁}

结果为:

A
a₁

除操作是同时从行和列的角度进行运算

借鉴

王珊,萨师煊.数据库系统概论(第五版)[M].北京:高等教育出版社,2014:48-56.
图片出自于书上

  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

不知 不知

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

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

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

打赏作者

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

抵扣说明:

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

余额充值