4、关系代数
关系代数是一种抽象的查询语言,它用对关系的运算来表达查询。运算的三大要素:运算对象、运算符、运算结果。关系代数的运算对象是关系,运算结果也是关系;运算符要用到的包括两类:集合运算符和专门的关系运算符。如下表所示:
运算符 | 含义 | |
集合运算符 |
![]() |
并 |
![]() |
差 | |
![]() |
交 | |
笛卡尔积 | ||
专门的关系运算符 | ![]() |
选择 |
![]() |
投影 | |
连接 | ||
![]() |
除 |
其中,传统的集合运算将关系看成元组的集合,其运算是从关系的 “ 水平 ” 方向,即行的角度来进行;而专门的关系运算不仅涉及行,而且涉及列。
一些符号的概念:
(1)R,t∈R,t[Ai]
① 设关系模式为 R(A1,A2,…,An) 它的一个关系设为 R;
② t∈R 表示 t 是 R 的一个元组;
③ t[Ai] 则表示元组 t 中相应于属性 Ai 的一个分量。
(2)A,t[A],
① 若 A = {Ai1,Ai2,…,Aik},其中 Ai1,Ai2,…,Aik 是A1, A2,…,An 中的一部分,则A称为属性列或属性组;
② t[A] = ( t[Ai1],t[Ai2],…,t[Aik] ) 表示元组 t 在属性列 A 上诸分量的集合;
③
则表示 { A1,A2,…,An } 中去掉 { Ai1,Ai2,…,Aik } 后剩余的属性组。
(3)
① R为 n 目关系,S 为 m 目关系。 tr∈R,ts∈S,
称为元组的连接。
②
是一个 n+m 列的元组,前 n 个分量为 R 中的一个 n 元组,后 m 个分量为 S 中的一个 m 元组。
(4)象集 Zx
给定一个关系R(X,Z),X 和 Z 为属性组。 当 t[X] = x 时,x 在 R 中的象集为:
Zx = { t[Z] | t ∈R,t[X]=x};
它表示 R 中属性组 X 上值为 x 的诸元组在 Z 上分量的集合。
【例】如图:
R x1 Z1 x1 Z2 x1 Z3 x2 Z2 x2 Z3 x3 Z1 x3 Z3 ① x1 在 R 中的象集为:
Zx1 = { Z1,Z2,Z3 };
② x2 在 R 中的象集为:
Zx2 = { Z2,Z3 };
③ x3 在 R 中的象集为:
Zx3 = { Z1,Z3 }。
(4.1)传统的集合运算
传统的集合运算是二目运算,包括并、差、交、笛卡尔积四种运算。
(4.1.1)并( Union )
条件:设关系 R 和关系 S 具有相同的目 n(即两个关系都有 n 个属性),且相应的属性取自同一个域。
记为:R∪S = { t | t ∈ R∨t ∈S };结果仍然为 n 目关系,由属于 R 或者属于 S 的元组组成。
【例】
(4.1.2)差( Difference )
条件:设关系 R 和关系 S 具有相同的目 n(即两个关系都有 n 个属性),且相应的属性取自同一个域。
记为:R - S = { t | t∈R∧t∉S };仍然为 n 目关系,由属于 R 而不属于 S 的所有元组组成。
【例】
(4.1.3)交( Intersection )
条件:设关系 R 和关系 S 具有相同的目 n(即两个关系都有 n 个属性),且相应的属性取自同一个域。
记为:R ∩ S = { t | t ∈ R∧t ∈S },R∩S = R –(R-S);仍然为 n 目关系,由既属于 R 又属于 S 的元组组成。
【例】
(4.1.4)笛卡尔积(Cartesian Product)
条件:两个分别为 n 目和 m 目的关系 R 和 S 的笛卡儿积是一个 (n+m) 列的元组的集合。元组的前 n 列是关系 R 的一个元组,后 m 列是关系 S 的一个元组。若 R 有 k1 个元组,S 有 k2 个元组,则关系 R 和关系 S 的笛卡儿积有 k1×k2 个元组。
记为:R×S = {
|tr ∈R ∧ ts∈S };列:(n+m) 列元组的集合;行:k1×k2 个元组。
【例】
(4.2)专门的关系运算
学生关系 Student、课程关系 Course 和选修关系 SC 如下表:
Student 学号
Sno
姓名
Sname
性别
Ssex
年龄
Sage
所在系
Sdept
202101 张三 男 20 CS 202102 李四 女 18 CS 202103 王五 女 19 MA 202104 赵六 男 20 IS
Course 课程号
Cno
课程名
Cname
先行课
Cpno
学分
Ccredit
1 数据库 5 4 2 数学 2 3 信息系统 1 4 4 操作系统 6 3 5 数据结构 7 4 6 数据处理 2 7 PASCAL语言 6 4
SC 学号
Sno
课程号
Cno
成绩
Grade
202101