数据库系统概论——关系代数详解
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
文章目录
1、关系代数概述
关系代数是一种抽象
的查询语言是关系数据操纵语言的一种传统表达方式
它是利用对关系的运算来表达查询的。
任何运算都是将一定的运算符作用于一定的运算对象上得到预期的运算结果。
关系代数的运算对象是关系运算结果亦为关系。
运算符
- 集合运算符
- 将关系看成
元组
的集合 - 从关系的“水平”方向即行的角度来进行运算
- 将关系看成
- 专门的关系运算符
- 不仅涉及
行
而且涉及列
- 不仅涉及
- 算术比较符
- 辅助专门的关系运算符进行操作
- 逻辑运算符
- 辅助专门的关系运算符进行操作
常见的关系运算符如下
1.1 传统的集合运算
设关系 R R R和关系 S S S是相容的 t t t代表元组变量现将各种运算分别介绍如下
1并Union
- 关系 R R R与关系 S S S的并记作 R ∪ S = { t ∣ t ∈ R ∨ t ∈ S } R∪S=\{t|t∈R∨t∈S \} R∪S={t∣t∈R∨t∈S}
- 结果关系是由属于 R R R或属于 S S S的元组组成且结果仍为 n n n目关系但结果关系要消除重复元组。
举例
R R R和 S S S
- 具有相同的目 n n n即两个关系都有n个属性
- 相应的属性取自同一个域
R ∪ S R∪S R∪S
- 仍为
n
n
n目关系由属于
R
R
R或属于
S
S
S的元组组成
- R ∪ S = { t ∣ t ∈ R ∨ t ∈ S } R∪S=\{t|t∈R∨t∈S \} R∪S={t∣t∈R∨t∈S}
具体如下图所示
2交 Intersection
- 关系 R R R与关系 S S S的交记作 R ∩ S = { t ∣ t ∈ R ∧ t ∈ S } R∩S=\{t|t∈R∧t∈S \} R∩S={t∣t∈R∧t∈S}
- 结果关系由既属于 R R R又属于 S S S的元组组成且仍为 n n n目关系。
举例
R R R和 S S S
- 具有相同的目 n n n
- 相应的属性取自同一个域
R ∩ S R∩S R∩S
- 仍为
n
n
n目关系由既属于
R
R
R又属于
S
S
S的元组组成
- 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}
- R R R和 S S S的差结果关系由属于 R R R而不属于 S S S的所有元组组成且仍为 n n n目关系,即在关系 R R R中减去 R R R和 S S S的相同元组。
举例
R R R和 S S S
- 具有相同的目 n n n
- 相应的属性取自同一个域
R − S R - S R−S
- 仍为
n
n
n目关系由属于
R
R
R而不属于
S
S
S的所有元组组成
- 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
- 两个分别为 n n n目和 m m m目的关系 R R R和 S S S的广义笛卡尔积是一个 ( n + m ) (n+m) (n+m)列的元组的集合。
- 元组的前 n n n列是关系 R R R的一个元组后 m m m列是关系 S S S的一个元组。若 R R R有 k 1 k_1 k1个元组 S S S有 k 2 k_2 k2个元组则关系 R R R和关系 S S S的广义笛卡尔积有 k 1 × k 2 k_1×k_2 k1×k2个元组。
- 记作 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=\{(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}。
严格地讲应该是广义的笛卡尔积
- R R R: n n n目关系 k 1 k_1 k1个元组
- S S S: m m m目关系 k 2 k_2 k2个元组
R × S R×S R×S
-
列: m + n m+n m+n列元组的集合
- 元组的前 n n n列是关系 R R R的一个元组
- 后 m m m列是关系 S S S的一个元组
-
行 k 1 × k 2 k_1×k_2 k1×k2个元组
具体如下图所示
1.2 专门的关系运算
在讲解之前我们先引入几个记号这样有助于下面的理解确实关系代数后半部分有点难理解。
1
R
,
t
∈
R
,
t
[
A
i
]
R,t\in R,t[A_i]
R,t∈R,t[Ai]
设关系模式为
R
(
A
1
A
2
…
A
n
)
R(A_1A_2…A_n)
R(A1A2…An)它的一个关系设为
R
R
R
t
∈
R
t\in R
t∈R表示
t
t
t是
R
R
R的一个元组
t
[
A
i
]
t[A_i]
t[Ai]则表示元组t中相应于属性
A
i
A_i
Ai的一个分量。
2
t
r
t
s
⏞
\overbrace{t_rt_s}
trts
R
R
R为
n
n
n目关系
S
S
S为
m
m
m目关系。
t
r
∈
R
t
s
∈
S
t
r
t
s
⏞
t_r\in Rt_s\in S \overbrace{t_r t_s}
tr∈Rts∈Strts
称为元组的连接。
t
r
t
s
⏞
\overbrace{t_r t_s}
trts
是一个
n
+
m
n + m
n+m列的元组前
n
n
n个分量为
R
R
R中的一个
n
n
n元组后
m
m
m个分量为
S
S
S中的一个
m
m
m元组。
3象集
Z
x
Z_x
Zx
给定一个关系
R
X
,
Z
RX,Z
RX,Z
X
X
X和
Z
Z
Z为属性组。当
t
[
X
]
=
x
t[X]=x
t[X]=x时
x
x
x在
R
R
R中的象集Images Set为
Z
x
=
t
[
Z
]
∣
t
∈
R
t
[
X
]
=
x
Z_x={t[Z]|t \in Rt[X]=x}
Zx=t[Z]∣t∈Rt[X]=x
它表示 R R R中属性组 X X X上值为 x x x的诸元组在 Z Z Z上分量的集合。
举例如下
上面抽象的例子可能并不是特别容易理解那么我们就拿生活中的实际例子进行解释
学生-课程-选修关系:
学生关系Student、课程关系Course和选修关系SC
在上面的关系表中我们可以把SC表看作一个关系R它的属性组为学号课程号以及成绩即
R
(
S
n
o
,
C
n
o
,
G
r
a
d
e
)
R(Sno, Cno, Grade)
R(Sno,Cno,Grade)。这时我们将SC表与上面那个例子对比可以看出Sno为200215121的学号在关系RSC表中的象集为
S
n
o
200215121
=
{
1
2
3
}
Sno_{200215121}=\{123\}
Sno200215121={123}以此类推这样就比较容易理解一点。
1.2.1 选择运算
- 选择又称为限制
- 选择运算符的含义
- 关系R上的选择操作是根据某些条件对关系R做水平分割即从行的角度选择符合条件的元组。
- 在关系R中选择满足给定条件的诸元组
- 记作 σ F R = { t ∣ t ∈ R ∧ F ( t ) = ‘真’ } σFR=\{t|t∈R∧F(t)=‘真’\} σFR={t∣t∈R∧F(t)=‘真’}
- F选择条件是一个逻辑表达式取逻辑值“真”或“假”。
- 选择运算是从关系R中选取使逻辑表达式F为真的元组是从行的角度进行的运算
F选择条件是一个逻辑表达式
- 基本形式为 X 1 θ Y 1 X_1θY_1 X1θY1
- θ θ θ比较运算符 > ≥ < ≤ =或 < > >≥<≤=或<> >≥<≤=或<>
- X 1 Y 1 X_1Y_1 X1Y1属性名、常量、简单函数.
- 属性名也可以用它的序号来代替
以最上面的学生-课程-选修关系表举例说明更好理解
[例1] 查询信息系IS系全体学生
σ S d e p t = ′ I S ′ ( S t u d e n t ) 或 σ 5 = ′ I S ′ ( S t u d e n t ) σ_{Sdept} = 'IS' (Student) 或 σ_5 ='IS'(Student) σSdept=′IS′(Student)或σ5=′IS′(Student)
结果
[例2] 查询年龄小于20岁的学生
σ
S
a
g
e
<
20
(
S
t
u
d
e
n
t
)
或
σ
4
<
20
(
S
t
u
d
e
n
t
)
σ_{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
- AR中的属性列
投影操作主要是从列的角度进行运算
但投影之后不仅取消了原关系中的某些列而且还可能取消某些元组避免重复行
举例说明一下
[例3] 查询学生的姓名和所在系
即求Student关系上学生姓名和所在系两个属性上的投影
π S n a m e S d e p t ( S t u d e n t ) 或 π 2 5 ( S t u d e n t ) π_{SnameSdept}(Student) 或 π_{25}(Student) πSnameSdept(Student)或π25(Student)
结果
[例4] 查询学生关系Student中都有哪些系
π S d e p t ( S t u d e n t ) π_{Sdept}(Student) πSdept(Student)
结果
由此可见使用投影操作可以将关系表中的列单独拿出来组成新的关系表这样方便我们可以更加清楚的查看自己想要的信息。
1.2.3 连接Join
连接也称为 θ θ θ连接
连接运算的含义
从两个关系的笛卡尔积中选取属性间满足一定条件的元组
连接运算从
R
和
S
R和S
R和S的广义笛卡尔积
R
×
S
R×S
R×S中选取
R
R
R关系在
A
A
A属性组上的值与
S
S
S关系在
B
B
B属性组上值满足比较关系
θ
θ
θ的元组
举例说明一下
[例5]关系R和关系S 如下所示
1.2.4 两类常用连接运算
1等值连接equijoin
- 什么是等值连接?
- θ为“=”的连接运算称为等值连接
- 等值连接的含义
- 从关系R与S的广义笛卡尔积中选取A、B属性值相等的
那些元组即等值连接为
举例说明
2自然连接Natural join
- 从关系R与S的广义笛卡尔积中选取A、B属性值相等的
- 自然连接是一种特殊的等值连接
- 两个关系中进行比较的分量必须是相同的属性组
- 在结果中把重复的属性列去掉
- 自然连接的含义
- R和S具有相同的属性组B
举例
一般的连接操作是从行的角度进行运算。
自然连接还需要取消重复列所以是同时从行和列的角度进行运算。
1.2.5 除Division
给定关系 R ( X Y ) R (XY) R(XY)和 S ( Y Z ) S (YZ) S(YZ)其中 X Y Z XYZ XYZ为属性组。 R R R中的 Y Y Y与 S S S中的 Y Y Y可以有不同的属性名但必须出自相同的域集。 R R R与 S S S的除运算得到一个新的关系 P ( X ) P(X) P(X) P P P是 R R R中满足下列条件的元组在 X X X 属性列上的投影
元组在
X
X
X上分量值
x
x
x的象集
Y
x
Y_x
Yx包含
S
S
S在
Y
Y
Y上投影的集合记作
关于象集的概念我们在前面已经提到了在此直接举例子说明除
[例6]设关系 R 、 S R、S R、S分别为下图的(a)和(b) R ÷ S R÷S R÷S的结果为图©
通过上面的结果我们可以发现关系 R R R中的 B 、 C B、C B、C属性组和关系 S S S中的 B 、 C B、C B、C属性组的域都是相同的 R 与 S R与S R与S的除运算得到了一个新的关系我们将它当做 P ( A ) P(A) P(A) P P P是 R R R中满足上述条件的元组在 A A A属性列中的投影。
分析
设关系
R
S
RS
RS,分别为例6中的(a)和(b)
R
÷
S
R÷S
R÷S的结果为图©,关系
R
R
R中
A
A
A可以取四个值
{
a
1
a
2
a
3
a
4
}
,
\{ a_1a_2a_3a_4\},
{a1a2a3a4}, 其中
- a 1 a_1 a1的象集为 { b 1 c 2 , b 2 c 1 b 2 c 3 } \{b_1c_2,b_2c_1b_2c_3\} {b1c2,b2c1b2c3}
- a 2 a_2 a2的象集为 { b 3 c 7 , b 2 C 3 } \{b_3c_7,b_2C_3\} {b3c7,b2C3}
- a 3 a_3 a3的象集为 { ( b 4 c 6 ) } \{ (b_4c_6) \} {(b4c6)}
- a 4 a_4 a4的象集为 { b 6 c 6 } \{b_6c_6\} {b6c6}
S S S在 B C BC BC上的投影为 { b 1 c 2 b 2 c 1 , b 2 c 3 } \{b_1c_2b_2c_1,b_2c_3\} {b1c2b2c1,b2c3}
显然只有 a 1 a_1 a1的象集包含了 S S S在 ( B , C ) (B,C) (B,C)属性组上的投影所以 R ÷ S = { a 1 } R÷S=\{a1\} R÷S={a1}。
除操作是同时从行和列角度进行运算
📢博客主页https://blog.csdn.net/m0_63007797?spm=1011.2415.3001.5343
📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正
📢本文由 心无旁骛~ 原创首发于 CSDN博客🙉
📢停下休息的时候不要忘了别人还在奔跑希望大家抓紧时间学习全力奔赴更美好的生活✨