代数"/>
数据库系统原理与应用教程(012)—— 关系代数
数据库系统原理与应用教程(012)—— 关系代数
目录
- 数据库系统原理与应用教程(012)—— 关系代数
- 一、关系运算用到的运算符
- 二、关系代数用到的记号说明
- 1、关系模式、关系、元组和分量
- 2、域列和域列非
- 3、元组的连串
- 4、属性的像集
- 三、集合运算
- 1、并运算
- 2、差运算
- 3、交运算
- 四、专门的关系运算
- 1、选择运算
- 2、投影运算
- 3、关系的笛卡尔积运算
- 4、连接运算
- 5、除运算
关系代数是一种抽象的查询语言,用关系的运算来表示查询。关系代数的运算对象是关系,运算结果也是关系。运算对象、运算符和运算结果是关系运算的三要素。
一、关系运算用到的运算符
1、比较运算符:>(大于),≥(大于或等于),<(小于),≤(小于或等于),=(等于),≠(不等于)。
3、集合运算符:∪(并),∩(交),-(差)∈
4、专门的关系运算符:σ(选择),π(投影),×(笛卡尔积),
二、关系代数用到的记号说明
1、关系模式、关系、元组和分量
关系模式 R(A1,A2,…,An),其中的一个关系设为 R,t ∈ R 表示 t 是 R 的一个元组,t[Ai] 表示元组 t 中相对于属性 Ai 的一个分量。
2、域列和域列非
如果 A = {Ai1,Ai2,…,Aik},其中 {Ai1,Ai2,…,Aik} 是 {A1,A2,…,An}} 中的一部分,则 A 称为属性列或域列。t[A] = {Ai1,Ai2,…,Aik} ,表示元素 t 在属性 A 上诸分量的集合。
Aik} 后剩余的属性组,称为 A 的域列非。
3、元组的连串
设 R 为 n 目关系,S 为 m 目关系,并且 tr∈ R,ts∈ S,则:
元组,它的前 n 个分量是 R 中的一个 n 元组,后 m 个分量是 S 中的一个 m 元组。
4、属性的像集
给定一个关系 R(X,Z),X 和 Z 为属性组。定义当 t[X] = x 时,x 在 R 中的像集为:
Zx = {t[Z] | t ∈ R,t[X] = x}
x 在 R 中的像集为 R 中 Z 属性对应分量的集合,而这些分量所对应的元组中的属性组 X 上的值为 x。
三、集合运算
两个关系进行集合运算要求两个关系的结构必须完全相同。即:两个关系具有相同的目(属性的个数相同),并且对应的属性取自同一个域。
1、并运算
关系 R 和 S 的并运算可以表示为:
R ∪ S = {t | t ∈ R ∨ t ∈ S}
关系 R 和 S 的并运算结果由属于 R 或属于 S 的元组构成,如下图所示。
2、差运算
关系 R 和 S 的差运算可以表示为:
R - S = {t | t ∈ R ∧ t ∈ S}
关系 R 和 S 的差运算结果由属于 R 而不属于 S 的元组构成,如下图所示。
3、交运算
关系 R 和 S 的交运算可以表示为:
关系 R 和 S 的交运算结果由既属于 R 又属于 S 的元组构成,关系的交运算可以用差运算来表示,即:R ∩ S = R-(R- S)。如下图所示。
【例1】有两个关系如下:
员工1
工号 | 姓名 | 性别 | 手机号 | 部门 |
---|---|---|---|---|
E0001 | 诸葛明 | 男 | 13703568877 | 营销部 |
E0002 | 李江涛 | 男 | 13082594678 | 财务部 |
E0003 | 王晓鸽 | 女 | 13537325566 | 营销部 |
E0004 | 王涛 | 男 | 13688774598 | 生产部 |
员工2
工号 | 姓名 | 性别 | 手机号 | 部门 |
---|---|---|---|---|
E0001 | 诸葛明 | 男 | 13703568877 | 营销部 |
E0002 | 李江涛 | 男 | 13082594678 | 财务部 |
E0005 | 刘涛 | 男 | 13823995867 | 生产部 |
E0006 | 张静静 | 女 | 13423568897 | 生产部 |
则:
员工1∪员工2
工号 | 姓名 | 性别 | 手机号 | 部门 |
---|---|---|---|---|
E0001 | 诸葛明 | 男 | 13703568877 | 营销部 |
E0002 | 李江涛 | 男 | 13082594678 | 财务部 |
E0003 | 王晓鸽 | 女 | 13537325566 | 营销部 |
E0004 | 王涛 | 男 | 13688774598 | 生产部 |
E0005 | 刘涛 | 男 | 13823995867 | 生产部 |
E0006 | 张静静 | 女 | 13423568897 | 生产部 |
员工1-员工2
工号 | 姓名 | 性别 | 手机号 | 部门 |
---|---|---|---|---|
E0003 | 王晓鸽 | 女 | 13537325566 | 营销部 |
E0004 | 王涛 | 男 | 13688774598 | 生产部 |
员工1∩ 员工2
工号 | 姓名 | 性别 | 手机号 | 部门 |
---|---|---|---|---|
E0001 | 诸葛明 | 男 | 13703568877 | 营销部 |
E0002 | 李江涛 | 男 | 13082594678 | 财务部 |
四、专门的关系运算
1、选择运算
选择运算是指在关系 R 中选择满足给定条件的元组,记作:
σF(R) = {t | t ∈R ∧ F(t)=‘真’}
其中:F 为选择运算的条件,是一个逻辑表达式,取值为真或假。F 可以由逻辑运算符与、或、非连接多个条件表达式组成。
条件表达式的基本形式为:X1 θ Y1
其中 θ 是比较运算符,可以是 >,≥,<,≤,=,≠,X1 和 Y1 可以是属性名、常量或表达式。属性名可以用序号(属性在关系中的顺序)来表示。
选择运算是从关系 R 中选取使条件表达式 F 为真的元组,是从行的角度进行的运算。
例如,有以下关系:
学生(学号,姓名,年龄,所在系)
课程(课程号,课程名,学分)
选课(学号,课程号,成绩)
【例2】用关系代数表示查询计算机系的全体学生。
σ所在系=‘计算机系’(学生)
或:σ4=‘计算机系’(学生) --4 是指在学生关系中,计算机系是第 4 个属性。
【例3】用关系代数表示查询年龄小于 20 岁的学生。
σ年龄 < 20(学生)
或:σ3 < 20(学生) --4 是指在学生关系中,年龄是第 3 个属性。
2、投影运算
关系 R 上的投影是从 R 中选择出若干属性列构成新的关系,记作:
πA(R) = {t[A] | t ∈ R }
其中:A 为 R 中的属性列。
投影操作是从列的角度进行运算。投影之后不仅取消了关系中的某些列,而且还可能取消某些元组,因为当取消了某些属性之后,就可能出现重复元组,关系操作将自动取消这些重复的元组。
【例4】用关系代数表示查询学生的姓名和所在系,即求学生关系在学生姓名和所在系两个属性上的投影,可以表示为:
π姓名,所在系 < 20(学生)
或:π2,4(学生) – 在学生关系中,姓名是第 2 个属性,所在系是第 4 个属性,可以用 【2,4】 表示【姓名,所在系】。
3、关系的笛卡尔积运算
设两个关系 R 和 S,其中 R 为 m 目的关系,n 为 n 目的关系,则关系 R 和 S 的笛卡尔积是一个(n+m)目的元组的集合。元组的前 n 列是关系 R 中的一个元组,后 m 列是关系 S 中的一个元组,如果关系 R 有 k1 个元组,关系 S 有 k2 个元组,则关系 R 和 S 的笛卡尔积有 k1 × k2 个元组。关系 R 和 S 的笛卡尔积可以表示为:
4、连接运算
连接运算是从两个关系的笛卡尔积中选取属性之间满足一定条件的元组。记作:
其中:A 和 B 分别是关系 R 和 S 上度数相等且科比的属性组, θ 是比较运算符。
连接运算是从关系 R 和 S 的笛卡尔积中,选取符合条件的元组。即选择在关系 R 中属性 A 上的值与关系 S 中属性 B 上的值满足比较操作符 θ 的元组。
当 θ 为 = 时,连接运算称为等值连接。等值连接时从关系 R 和 S 的笛卡尔积中选取属性 A 和 B 相等的元组。等值连接可以表示为:
自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须时相同的属性组,并且在结果中把重复的属性去掉。
如果 R 和 S 有相同的属性组 A,则它们的自然连接可表示为:
【例5】有下面两个关系学生和班级,求关系学生和班级的笛卡尔积、等值连接和自然连接。
学生:
学号 | 姓名 | 性别 | 年龄 | 班级编号 |
---|---|---|---|---|
S0001 | 张晓刚 | 男 | 20 | C01 |
S0002 | 张静静 | 女 | 20 | C01 |
S1001 | 刘涛 | 男 | 19 | C02 |
班级:
班级编号 | 班级名称 |
---|---|
C01 | 物流201 |
C02 | 物流202 |
(1)关系学生和班级的笛卡尔积
学号 | 姓名 | 性别 | 年龄 | 学生.班级编号 | 班级.班级编号 | 编辑名称 |
---|---|---|---|---|---|---|
S0001 | 张晓刚 | 男 | 20 | C01 | C01 | 物流201 |
S0002 | 张静静 | 女 | 20 | C01 | C01 | 物流201 |
S1001 | 刘涛 | 男 | 19 | C02 | C02 | 物流201 |
S0001 | 张晓刚 | 男 | 20 | C01 | C01 | 物流202 |
S0002 | 张静静 | 女 | 20 | C01 | C01 | 物流202 |
S1001 | 刘涛 | 男 | 19 | C02 | C02 | 物流202 |
(2)关系学生和班级的等值连接
学号 | 姓名 | 性别 | 年龄 | 学生.班级编号 | 班级.班级编号 | 编辑名称 |
---|---|---|---|---|---|---|
S0001 | 张晓刚 | 男 | 20 | C01 | C01 | 物流201 |
S0002 | 张静静 | 女 | 20 | C01 | C01 | 物流201 |
S1001 | 刘涛 | 男 | 19 | C02 | C02 | 物流202 |
(3)关系学生和班级的自然连接
学号 | 姓名 | 性别 | 年龄 | 班级编号 | 编辑名称 |
---|---|---|---|---|---|
S0001 | 张晓刚 | 男 | 20 | C01 | 物流201 |
S0002 | 张静静 | 女 | 20 | C01 | 物流201 |
S1001 | 刘涛 | 男 | 19 | C02 | 物流202 |
5、除运算
给定关系 R(X,Y)和 S(Y,Z),其中 X、Y、Z 为属性或属性组。R 中的 Y 与 S 中的 Y 可以有不同的属性名,但必须出自同一个域。R 和 S 的除运算得到一个新的关系 P(X),P 是 R 中满足下列条件的元组在 X 属性列上的投影:元组在 X 上的分量值 x 的像集 Yx,包含 S 在 Y 上的投影,记作:
R ÷ S = { tr[X] | {tr ∈ R ∧ πY ⊆ Yx }
其中:Yx 为 x 在 R 中的像集,x = tr[X]
在进行除运算时,将被除关系 R 的属性分成两部分:与除关系相同的部分 Y 和不同的部分 X,在被除关系中按 X 的值分组,即 X 的值相同的元组分为一组。除运算就是求包含除关系中全部 Y 值的组,这些组中的 X 值将作为除结果的元组。
关系的除运算可以分为以下步骤进行:
(1)将被除关系的属性分为像集属性(Y)和结果属性(X)两部分:与除关系相同的属性属于像集属性,不相同的属性属于结果属性。
(2)在除关系中,对于除关系相同的属性(像集属性)进行投影,得到除目标数据集。
(3)将被除关系分组,结果属性值一样的元组分为一组。
(4)逐一考察每一个组,如果它的像集属性值中包含除目标结果集,则对应的结果属性值就属于该除运算结果集。
【例6】有选课、选修课和必修课三个关系,关系模式如下:
选课(学号,课程号,分数)
选修课(课程号,课程名)
必修课(课程号,课程名)
三个表表中的数据如下:
选课表:
学号 | 课程号 | 分数 |
---|---|---|
S1 | C1 | A |
S1 | C2 | B |
S1 | C3 | B |
S2 | C1 | A |
S2 | C3 | B |
S3 | C1 | B |
S3 | C3 | B |
S4 | C1 | A |
S4 | C2 | A |
S5 | C2 | B |
S5 | C3 | B |
S5 | C1 | A |
选修课表:
课程号 | 课程名 |
---|---|
C2 | 计算机组成原理 |
必修课表:
课程号 | 课程名 |
---|---|
C1 | 数据结果 |
C3 | 操作系统原理 |
(1)求:选课 ÷ 选修课,步骤如下:
A)将选课关系的属性分为两组:【课程号】(像集属性 Y)和【学号,成绩】(结果属性 X)两部分。
B)在除关系中,对于除关系相同的属性(课程号)进行投影,得到除目标数据集。如下图所示:
C)将选课表按【学号,分数】进行分组,结果属性值一样的元组分为一组。分组结果如下图所示:
D)逐一考察每一个组,如果它的像集属性值中包含除目标结果集(C2),则对应的结果属性值就属于该除运算结果集。
选课 ÷ 选修课的结果如下图所示:
【选课 ÷ 选修课】的意义是:在选修课表中查找选修了选修表中给定的全部课程(C2)、并且分数相同的学生的学号和分数。由于选课表和选修课表中有相同的属性【课程号】,所以可以进行除运算。由于被除关系选课中与除关系选修课中不相同的属性是【学号,分数】,所以除运算的结果表中包含学号和分数两个属性。除运算的结果是求哪些像集中包含除关系(选修课)中【课程号】全部数据的学号和分数。
(2)求:选课 ÷ 必修课
A)将选课关系的属性分为两组:【课程号】(像集属性 Y)和【学号,成绩】(结果属性 X)两部分。
B)在除关系中,对于除关系相同的属性(课程号)进行投影,得到除目标数据集。如下图所示:
C)将选课表按【学号,分数】进行分组,结果属性值一样的元组分为一组。分组结果如下图所示:
D)逐一考察每一个组,如果它的像集属性值中包含除目标结果集(C1 和 C3),则对应的结果属性值就属于该除运算结果集。
选课 ÷ 必修课的结果如下图所示:
【选课 ÷ 必修课】表示求选修了必修课表中给定当前全部课程(C1 和 C3),并且分数形同的学生的学号和分数。其中学号 S1、S2、S5 的学生都选修了 C1 和 C3 课程,但由于分数不相同,所以学生 S1、S2、S5 并不在结果集中。
(3)求:π学号,课程号 (选课)÷ 必修课
A)对选课关系进行投影,只保留学号和课程号两个属性。如下图所示:
B)将投影之后的选课的属性分为两组:【课程号】(像集属性 Y)和【学号】(结果属性 X)两部分。
C)在除关系中,对于除关系相同的属性(课程号)进行投影,得到除目标数据集。如下图所示:
D)将选课表按【学号】进行分组,结果属性值一样的元组分为一组。分组结果如下图所示:
E)逐一考察每一个组,如果它的像集属性值中包含除目标结果集(C1 和 C3),则对应的结果属性值就属于该除运算结果集。
π学号,课程号 (选课)÷ 必修课的结果如下图所示:
【π学号,课程号 (选课)÷ 必修课】的含义是求选修了必修课中规定的全部课程的学生的学号。
更多推荐
数据库系统原理与应用教程(012)—— 关系代数
发布评论