文章目录
- 1、关系代数概述
-
-
- 1.1 传统的集合运算
- 1.2 专门的关系运算
-
- 1.2.1 选择运算
- 1.2.2 投影(Projection)
- 1.2.3 连接(Join)
- 1.2.4 两类常用连接运算
- 1.2.5 除(Division)
-
1、关系代数概述
关系代数是一种抽象
的查询语言,是关系数据操纵语言的一种传统表达方式
,它是利用对关系的运算来表达查询的。
任何运算都是将一定的运算符作用于一定的运算对象上,得到预期的运算结果。
关系代数的运算对象是关系,运算结果亦为关系。
在关系代数运算中,有5种基本运算,它们是并(U)、差(—)、投影、选择、笛卡尔积(X),其它运算即交、连接和除,均可通过5种基本的运算来表达 。
运算符:
- 集合运算符
- 将关系看成
元组
的集合 - 从关系的“水平”方向即行的角度来进行运算
- 将关系看成
- 专门的关系运算符
- 不仅涉及
行
而且涉及列
- 不仅涉及
- 算术比较符
- 辅助专门的关系运算符进行操作
- 逻辑运算符
- 辅助专门的关系运算符进行操作
常见的关系运算符如下:
1.1 传统的集合运算
设关系
R
R
R和关系
S
S
S是相容的,
t
t
t代表元组变量,现将各种运算分别介绍如下:
(1)并(Union)
- 关系
R
R
S
S
R
∪
S
=
{
t
∣
t
∈
R
∨
t
∈
S
}
R∪S={t|t∈R∨t∈S }
- 结果关系是由属于
R
R
S
S
n
n
举例:
R
R
R和
S
S
S
- 具有相同的目
n
n
- 相应的属性取自同一个域
R
∪
S
R∪S
R∪S
- 仍为
n
n
R
R
S
S
-
R
∪
S
=
{
t
∣
t
∈
R
∨
t
∈
S
}
R∪S={t|t∈R∨t∈S }
-
具体如下图所示:
(2)交( Intersection)
- 关系
R
R
S
S
R
∩
S
=
{
t
∣
t
∈
R
∧
t
∈
S
}
R∩S={t|t∈R∧t∈S }
- 结果关系由既属于
R
R
S
S
n
n
举例:
R
R
R和
S
S
S
- 具有相同的目
n
n
- 相应的属性取自同一个域
R
∩
S
R∩S
R∩S
- 仍为
n
n
R
R
S
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
R
S
S
R
R
S
S
n
n
R
R
R
R
S
S
举例:
R
R
R和
S
S
S
- 具有相同的目
n
n
- 相应的属性取自同一个域
R
−
S
R – S
R−S
- 仍为
n
n
R
R
S
S
-
R
−
S
=
{
t
∣
t
∈
R
∧
t
∉
S
}
R-S={t|t∈R ∧t notin S}
-
(4)广义笛卡尔积(Extended Cartesian Product)
- 两个分别为
n
n
m
m
R
R
S
S
(
n
+
m
)
(n+m)
- 元组的前
n
n
R
R
m
m
S
S
R
R
k
1
k_1
S
S
k
2
k_2
R
R
S
S
k
1
×
k
2
k_1×k_2
- 记作:
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
R
n
n
k
1
k_1
-
S
S
m
m
k
2
k_2
R
×
S
R×S
R×S
-
列:
m
+
n
m+n
m+n列元组的集合
- 元组的前
n
n
R
R
- 后
m
m
S
S
- 元组的前
-
行:
k
1
×
k
2
k_1×k_2
k1×k2个元组
具体如下图所示:
1.2 专门的关系运算
在讲解之前,我们先引入几个记号,这样有助于下面的理解,确实关系代数后半部分有点难理解。
(1)
R
,
t
∈
R
,
t
[
A
i
]
R,tin R,t[A_i]
R,t∈R,t[Ai]
设关系模式为
R
(
A
1
,
A
2
,
…
,
A
n
)
R(A_1,A_2,…,A_n)
R(A1,A2,…,An),它的一个关系设为
R
R
R,
t
∈
R
tin 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_rin R,t_sin S, overbrace{t_r t_s}
tr∈R,ts∈S,trts
称为元组的连接。
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
)
R(X,Z)
R(X,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 R,t[X]=x}
Zx=t[Z]∣t∈R,t[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的学号在关系R(SC表)中的象集为
S
n
o
200215121
=
{
1
,
2
,
3
}
Sno_{200215121}={1,2,3}
Sno200215121={1,2,3},以此类推,这样就比较容易理解一点。
1.2.1 选择运算
- 选择又称为限制
- 选择运算符的含义
- 关系R上的选择操作是根据某些条件对关系R做水平分割,即从行的角度选择符合条件的元组。
- 在关系R中选择满足给定条件的诸元组
- 记作:
σ
F
(
R
)
=
{
t
∣
t
∈
R
∧
F
(
t
)
=
‘真’
}
σF(R)={t|t∈R∧F(t)=‘真’}
- 记作:
- F:选择条件,是一个逻辑表达式,取逻辑值“真”或“假”。
- 选择运算是从关系R中选取使逻辑表达式F为真的元组,是从行的角度进行的运算
F:选择条件,是一个逻辑表达式
- 基本形式为:
X
1
θ
Y
1
X_1θY_1
-
θ
θ
(>,
≥
,<,
≤
,=或
)
(>,≥,<,≤,=或)
-
X
1
,
Y
1
X_1,Y_1
- 属性名也可以用它的序号来代替;
以最上面的学生-课程-选修关系表举例说明更好理解:
[例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
σSage20(Student)或σ420(Student)
结果:
1.2.2 投影(Projection)
投影运算符的含义:
- 从R中选择出若干属性列组成新的关系
-
π
A
(
R
)
=
t
[
A
]
∣
t
∈
R
π_A(R) = { t[A] | t in R }
- A:R中的属性列
-
投影操作主要是从列的角度进行运算:
但投影之后不仅取消了原关系中的某些列,而且还可能取消某些元组(避免重复行)
举例说明一下:
[例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
)
π_{Sname,Sdept}(Student) 或 π_{2,5}(Student)
πSname,Sdept(Student)或π2,5(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属性值相等的
那些元组,即等值连接为:
举例说明:
- 从关系R与S的广义笛卡尔积中选取A、B属性值相等的
(2)自然连接(Natural join)
- 自然连接是一种特殊的等值连接
- 两个关系中进行比较的分量必须是相同的属性组
- 在结果中把重复的属性列去掉
- 自然连接的含义
- R和S具有相同的属性组B
举例:
一般的连接操作是从行的角度进行运算。
自然连接还需要取消重复列,所以是同时从行和列的角度进行运算。
1.2.5 除(Division)
给定关系
R
(
X
,
Y
)
R (X,Y)
R(X,Y)和
S
(
Y
,
Z
)
S (Y,Z)
S(Y,Z),其中
X
,
Y
,
Z
X,Y,Z
X,Y,Z为属性组。
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
R,S
R,S,分别为例6中的(a)和(b),
R
÷
S
R÷S
R÷S的结果为图©,关系
R
R
R中
A
A
A可以取四个值
{
a
1
,
a
2
,
a
3
,
a
4
}
,
{ a_1,a_2,a_3,a_4},
{a1,a2,a3,a4}, 其中:
-
a
1
a_1
{
(
b
1
,
c
2
)
,
(
b
2
,
c
1
),(
b
2
,
c
3
)
}
{(b_1,c_2),(b_2,c_1),(b_2,c_3)}
-
a
2
a_2
{
(
b
3
,
c
7
)
,
(
b
2
,
C
3
)
}
{(b_3,c_7),(b_2,C_3)}
-
a
3
a_3
{
(
b
4
,
c
6
)
}
{ (b_4,c_6) }
-
a
4
a_4
{
(
b
6
,
c
6
)
}
{(b_6,c_6)}
S
S
S在
(
B
,
C
)
(B,C)
(B,C)上的投影为
{
(
b
1
,
c
2
),(
b
2
,
c
1
)
,
(
b
2
,
c
3
)
}
{(b_1,c_2),(b_2,c_1),(b_2,c_3)}
{(b1,c2),(b2,c1),(b2,c3)}
显然只有
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博客🙉
📢停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨