关系数据库之关系代数
1 传统的集合运算1.1 并 union1.2 差 except1.3 交 intersection1.4 笛卡尔积 cartesian product2 专用的集合运算2.1 选择 selection2.2 投影 projection2.3 连接 join2.4 除 division...
文章目录
关系数据库的关系代数运算符有8种,分为两大类,如下表所示:
分类 | 运算符 | 含义 |
---|---|---|
传统关系运算符 | ∪ ∪ ∪ | 并 |
− − − | 差 | |
∩ ∩ ∩ | 交 | |
× × × | 笛卡尔积 | |
专用关系运算符 | σ | 选择 |
∏ | 投影 | |
⋈ | 连接 | |
÷ | 除 |
1 传统的关系运算
传统的集合运算是二元运算,包括并、差、交、笛卡尔积4种运算。设有两关系R、S。
1.1 并 union
关系R与关系S的并记作: R ∪ S = { t ∣ t ∈ R ∨ t ∈ S } R\cup S=\{t\ |\ t\in R \lor t\in S\} R∪S={t ∣ t∈R∨t∈S}即合并R和S所有元组
1.2 交 intersection
关系R与关系S的交记作: R ∩ S = { t ∣ t ∈ R ∧ t ∈ S } R\cap S=\{t\ |\ t\in R \land t\in S\} R∩S={t ∣ t∈R∧t∈S}关系的交也可用差来表示: R ∩ S = R − ( R − S ) R\cap S=R-(R-S) R∩S=R−(R−S)即取出R与S中共有的元组
1.3 差 except
关系R与关系S的差记作: R − S = { t ∣ t ∈ R ∧ t ∉ S } R- S=\{t\ |\ t\in R \land t\notin S\} R−S={t ∣ t∈R∧t∈/S}即去掉R中属于S的元素
1.4 笛卡尔积 cartesian product
关系R与关系S的并记作: R × S = { t R t S ⌢ ∣ t R ∈ R ∧ t S ∈ S } R\times S=\{\overset{\large\frown}{t_Rt_S}\ |\ t_R\in R \land t_S\in S\} R×S={tRtS⌢ ∣ tR∈R∧tS∈S}这里的笛卡尔积指的是广义笛卡尔积,对元组进行笛卡尔积有点类似于小学数学课上学过的握手游戏。
对于
R
×
S
R\times S
R×S来说,表示每个R中的元组都要与S中的元组连接一次
1.5 传统关系运算举例
设 R R R:
color | pattern | size |
---|---|---|
红 | A | 5 |
红 | B | 10 |
蓝 | B | 5 |
S S S:
color | pattern | size |
---|---|---|
红 | B | 10 |
红 | C | 10 |
蓝 | B | 5 |
则有:
- R R R与 S S S的并 R ∪ S R\cup S R∪S:
color | pattern | size |
---|---|---|
红 | A | 5 |
红 | B | 10 |
蓝 | B | 5 |
红 | C | 10 |
- R R R与 S S S的交 R ∩ S R\cap S R∩S:
color | pattern | size |
---|---|---|
红 | B | 10 |
蓝 | B | 5 |
- R R R与 S S S的差 R − S R- S R−S:
color | pattern | size |
---|---|---|
红 | A | 5 |
- R R R与 S S S的笛卡尔积 R × S R\times S R×S:
R.color | R.pattern | R.size | S.color | S.pattern | S.size |
---|---|---|---|---|---|
红 | A | 5 | 红 | B | 10 |
红 | A | 5 | 红 | C | 10 |
红 | A | 5 | 蓝 | B | 5 |
红 | B | 10 | 红 | B | 10 |
红 | B | 10 | 红 | C | 10 |
红 | B | 10 | 蓝 | B | 5 |
蓝 | B | 5 | 红 | B | 10 |
蓝 | B | 5 | 红 | C | 10 |
蓝 | B | 5 | 蓝 | B | 5 |
2 专用的关系运算
专用的关系运算符包括选择、投影、连接、除运算
在具体介绍运算符之前为了方便表达,先引入几个符号:
- R R R:关系。 R = { r 1 , r 2 , . . . , r n } R=\{r_1,r_2,...,r_n\} R={r1,r2,...,rn},其中 r i r_i ri表示 R R R中的列。类似的, S S S等符号也代表一个关系
- t t t:元组。 t t t代表 R R R的某一行,称 t t t为元组。
- t [ r i ] t[r_i] t[ri]:分量。 t [ r i ] t[r_i] t[ri]表示 t t t行中 r i r_i ri列的值,称 t [ r i ] t[r_i] t[ri]为分量。
- Z t [ r i ] Z_{t[r_i]} Zt[ri]:象集。 Z t [ r i ] Z_{t[r_i]} Zt[ri]表示 t t t行中除 r i r_i ri列外其他列的值,称 Z t [ r i ] Z_{t[r_i]} Zt[ri]为象集。
- θ \theta θ:比较运算符。比较运算符有6种,分别是 = = =、 > > >、 ≥ \geq ≥、 < < <、 ≤ \leq ≤、 < > <> <>
2.1 选择 selection
选择关系运算记作:
σ
r
i
θ
t
[
r
i
]
(
R
)
=
{
t
∣
t
∈
R
∧
r
i
θ
t
[
r
i
]
=
t
r
u
e
}
\sigma_{r_i\theta t[r_i]}(R)=\{\ t\ |\ t\in R\land r_i\theta t[r_i]=true\}
σriθt[ri](R)={ t ∣ t∈R∧riθt[ri]=true}即取出
R
R
R表中
r
i
r_i
ri列的值与
t
[
r
i
]
t[r_i]
t[ri]具有
θ
\theta
θ关系的行
例如:
σ
S
a
g
e
<
20
(
S
t
u
d
e
n
t
)
\sigma_{Sage<20}(Student)
σSage<20(Student)表示取出
S
t
u
d
e
n
t
Student
Student表中
S
a
g
e
Sage
Sage列值小于数值20的行
σ
S
n
a
m
e
=
′
李
勇
′
(
S
t
u
d
e
n
t
)
\sigma_{Sname='李勇'}(Student)
σSname=′李勇′(Student)表示取出
S
t
u
d
e
n
t
Student
Student表中
S
n
a
m
e
Sname
Sname列值等于字符串李勇的行
2.2 投影 projection
投影关系运算记作:
∏
r
i
(
R
)
=
{
t
[
r
i
]
∣
t
∈
R
}
\prod\ _{r_i}(R)=\{t[r_i]\ |\ t\in R\}
∏ ri(R)={t[ri] ∣ t∈R}即取出
R
R
R表中的
r
i
r_i
ri列
例如:
∏
S
a
g
e
(
S
t
u
d
e
n
t
)
\prod\ _{Sage}(Student)
∏ Sage(Student)表示从表
S
t
u
d
e
n
t
Student
Student取出
S
a
g
e
Sage
Sage列形成新的关系
∏
S
a
g
e
,
S
n
a
m
e
(
S
t
u
d
e
n
t
)
\prod\ _{Sage,Sname}(Student)
∏ Sage,Sname(Student)表示从表
S
t
u
d
e
n
t
Student
Student取出
S
a
g
e
Sage
Sage和
S
n
a
m
e
Sname
Sname列形成新的关系
2.3 连接 join
连接关系运算记作: r i θ r j R ⋈ S = { t R t S ∣ t R ∈ R ∧ t S ∈ R ∧ t R [ r i ] θ t S [ r j ] ⌢ } \overset{R\Join S}{_{r_{i}\theta r_{j}}}=\{\overset{\large\frown}{t_Rt_S\ |t_R\in R \land t_S\in R\land t_R[r_i]\theta t_S[r_j]\ }\} riθrjR⋈S={tRtS ∣tR∈R∧tS∈R∧tR[ri]θtS[rj] ⌢}即选取 R R R与 S S S的笛卡尔积中 t R [ r i ] t_R[r_i] tR[ri]与 t S [ r j ] t_S[r_j] tS[rj]满足关系 θ \theta θ的行
连接有四种特殊形式:
- 非等值连接。就是指 θ \theta θ不为等号的连接,例如 r i < r j R ⋈ S \overset{R\Join S}{_{r_{i}< r_{j}}} ri<rjR⋈S表示连接满足 R . r i < S . r j R.r_i<S.r_j R.ri<S.rj关系的 R R R与 S S S中的元组
- 等值连接。就是指 θ \theta θ为等号的连接,例如 r i = r j R ⋈ S \overset{R\Join S}{_{r_{i}=r_{j}}} ri=rjR⋈S表示连接满足 R . r i = S . r j R.r_i=S.r_j R.ri=S.rj关系的 R R R与 S S S中的元组
- 自然连接。自然连接是一种特殊的等值连接,就是 r i r_i ri与 r j r_j rj的属性名一致且值相等的等值连接,并在连接结果中去掉重复列,而在一般的等值连接中只需要满足 r i r_i ri与 r j r_j rj的值相等即可,记作 R ⋈ S R\Join S R⋈S。
- 外连接。外连接是一种特殊的自然连接,在自然连接的过程中,若连接后元组里的某个属性出现Null值就会舍去该元组,而外连接则会保留该元组。外连接分为三种:
- 1、外连接。保留两边关系自然连接后出现Null值属性的元组,记作 R : ⋈ : S R:\Join: S R:⋈:S
- 2、左外连接。保留左边关系自然连接后出现Null值属性的元组,记作 R : ⋈ S R:\Join S R:⋈S
- 3、右外连接。保留右边关系自然连接后出现Null值属性的元组,记作 R ⋈ : S R\Join: S R⋈:S
2.4 除 division
除关系运算记作:
R
÷
S
=
{
t
R
[
r
i
]
∣
t
R
∈
R
∧
∏
r
j
(
S
)
⊆
r
j
t
R
[
r
i
]
}
R\div S=\{\ t_R[r_i]\ |\ t_R\in R\land\prod\ _{r_j}(S)\subseteq r_{j\ t_R[r_i]}\ \}
R÷S={ tR[ri] ∣ tR∈R∧∏ rj(S)⊆rj tR[ri] }即取出
R
R
R中使
R
.
r
j
R.r_j
R.rj完全等于
S
.
r
j
S.r_j
S.rj的
R
.
r
i
R.r_i
R.ri元组
例如:
∏
S
n
a
m
e
,
S
a
g
e
(
R
)
÷
∏
S
a
g
e
S
\prod\ _{Sname,Sage}(R)\div \prod\ _{Sage}S
∏ Sname,Sage(R)÷∏ SageS表示取
R
R
R投影中使
R
.
S
a
g
e
R.Sage
R.Sage完全等于
S
.
a
g
e
S.age
S.age的
R
.
n
a
m
e
R.name
R.name元组,形成新的关系
2.5 专用关系运算举例
设 R R R:
color | pattern | size |
---|---|---|
红 | A | 5 |
红 | B | 6 |
蓝 | C | 8 |
蓝 | D | 12 |
S S S:
pattern | weight |
---|---|
A | 3 |
B | 7 |
C | 10 |
C | 2 |
E | 2 |
- R R R的选择, σ c o l o r = ′ 红 ′ ( R ) \sigma_{color='红'}(R) σcolor=′红′(R),取出 R R R表中 c o l o r color color列值为字符串’红’的行形成新的关系:
color | pattern | size |
---|---|---|
红 | A | 5 |
红 | B | 6 |
- R R R的投影, ∏ c o l o r , s i z e ( R ) \prod\ _{color,size}(R) ∏ color,size(R),从表 R R R取出 c o l o r , s i z e color,size color,size列形成新的关系:
color | size |
---|---|
红 | 5 |
红 | 6 |
蓝 | 8 |
蓝 | 12 |
- R R R与 S S S的连接
非等值连接, s i z e < w e i g h t R ⋈ S \overset{R\Join S}{_{size< weight}} size<weightR⋈S,连接满足 s i z e < w e i g h t size< weight size<weight关系的 R R R与 S S S中的元组
color | R.pattern | size | S.pattern | weight |
---|---|---|---|---|
红 | A | 5 | B | 7 |
红 | A | 5 | C | 10 |
红 | B | 6 | B | 7 |
红 | B | 6 | C | 10 |
蓝 | C | 8 | C | 10 |
等值连接, R . p a t t e r n = S . p a t t e r n R ⋈ S \overset{R\Join S}{_{R.pattern= S.pattern}} R.pattern=S.patternR⋈S,连接满足 R . p a t t e r n = S . p a t t e r n R.pattern= S.pattern R.pattern=S.pattern关系的 R R R与 S S S中的元组
color | R.pattern | size | S.pattern | weight |
---|---|---|---|---|
红 | A | 5 | A | 3 |
红 | B | 6 | B | 7 |
蓝 | C | 8 | C | 10 |
蓝 | C | 8 | C | 2 |
自然连接, R ⋈ S R\Join S R⋈S,连接 R R R与 S S S中同名属性值相等的元组:
color | pattern | size | weight |
---|---|---|---|
红 | A | 5 | 3 |
红 | B | 6 | 7 |
蓝 | C | 8 | 10 |
蓝 | C | 8 | 2 |
外连接, R : ⋈ : S R:\Join: S R:⋈:S,保留两边关系自然连接后出现Null值属性的元组:
color | pattern | size | weight |
---|---|---|---|
红 | A | 5 | 3 |
红 | B | 6 | 7 |
蓝 | C | 8 | 10 |
蓝 | C | 8 | 2 |
蓝 | D | 12 | null |
null | E | null | 2 |
左外连接, R : ⋈ S R:\Join S R:⋈S,保留左边关系自然连接后出现Null值属性的元组:
color | pattern | size | weight |
---|---|---|---|
红 | A | 5 | 3 |
红 | B | 6 | 7 |
蓝 | C | 8 | 10 |
蓝 | C | 8 | 2 |
蓝 | D | 12 | null |
右外连接, R ⋈ : S R\Join: S R⋈:S,保留右边关系自然连接后出现Null值属性的元组:
color | pattern | size | weight |
---|---|---|---|
红 | A | 5 | 3 |
红 | B | 6 | 7 |
蓝 | C | 8 | 10 |
蓝 | C | 8 | 2 |
null | E | null | 2 |
-
R
R
R的除运算
设有除关系 K K K
color | size |
---|---|
红 | 5 |
红 | 6 |
则 R ÷ K R\div K R÷K表示取出 R R R中使 R . c o l o r R.color R.color完全等于 S . c o l o r S.color S.color、 R . s i z e R.size R.size完全等于 S . s i z e S.size S.size的 R . p a r t t e n R.partten R.partten元组
partten |
---|
A |
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)