关系数据库的关系代数运算符有8种,分为两大类,如下表所示:
分类 |
运算符 |
含义 |
传统关系运算符 |
∪ |
并 |
− |
差 |
∩ |
交 |
× |
笛卡尔积 |
专用关系运算符 |
σ |
选择 |
∏ |
投影 |
⋈ |
连接 |
÷ |
除 |
1 传统的关系运算
传统的集合运算是二元运算,包括并、差、交、笛卡尔积4种运算。设有两关系R、S。
1.1 并 union
关系R与关系S的并记作:
R∪S={t ∣ t∈R∨t∈S}即合并R和S所有元组
1.2 交 intersection
关系R与关系S的交记作:
R∩S={t ∣ t∈R∧t∈S}关系的交也可用差来表示:
R∩S=R−(R−S)即取出R与S中共有的元组
1.3 差 except
关系R与关系S的差记作:
R−S={t ∣ t∈R∧t∈/S}即去掉R中属于S的元素
1.4 笛卡尔积 cartesian product
关系R与关系S的并记作:
R×S={tRtS⌢ ∣ tR∈R∧tS∈S}这里的笛卡尔积指的是广义笛卡尔积,对元组进行笛卡尔积有点类似于小学数学课上学过的握手游戏。
对于
R×S来说,表示每个R中的元组都要与S中的元组连接一次
1.5 传统关系运算举例
设
R:
color |
pattern |
size |
红 |
A |
5 |
红 |
B |
10 |
蓝 |
B |
5 |
S:
color |
pattern |
size |
红 |
B |
10 |
红 |
C |
10 |
蓝 |
B |
5 |
则有:
-
R与
S的并
R∪S:
color |
pattern |
size |
红 |
A |
5 |
红 |
B |
10 |
蓝 |
B |
5 |
红 |
C |
10 |
-
R与
S的交
R∩S:
color |
pattern |
size |
红 |
B |
10 |
蓝 |
B |
5 |
-
R与
S的差
R−S:
-
R与
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={r1,r2,...,rn},其中
ri表示
R中的列。类似的,
S等符号也代表一个关系
-
t:元组。
t代表
R的某一行,称
t为元组。
-
t[ri]:分量。
t[ri]表示
t行中
ri列的值,称
t[ri]为分量。
-
Zt[ri]:象集。
Zt[ri]表示
t行中除
ri列外其他列的值,称
Zt[ri]为象集。
-
θ:比较运算符。比较运算符有6种,分别是
=、
>、
≥、
<、
≤、
<>
2.1 选择 selection
选择关系运算记作:
σriθt[ri](R)={ t ∣ t∈R∧riθt[ri]=true}即取出
R表中
ri列的值与
t[ri]具有
θ关系的行
例如:
σSage<20(Student)表示取出
Student表中
Sage列值小于数值20的行
σSname=′李勇′(Student)表示取出
Student表中
Sname列值等于字符串李勇的行
2.2 投影 projection
投影关系运算记作:
∏ ri(R)={t[ri] ∣ t∈R}即取出
R表中的
ri列
例如:
∏ Sage(Student)表示从表
Student取出
Sage列形成新的关系
∏ Sage,Sname(Student)表示从表
Student取出
Sage和
Sname列形成新的关系
2.3 连接 join
连接关系运算记作:
riθrjR⋈S={tRtS ∣tR∈R∧tS∈R∧tR[ri]θtS[rj] ⌢}即选取
R与
S的笛卡尔积中
tR[ri]与
tS[rj]满足关系
θ的行
连接有四种特殊形式:
- 非等值连接。就是指
θ不为等号的连接,例如
ri<rjR⋈S表示连接满足
R.ri<S.rj关系的
R与
S中的元组
- 等值连接。就是指
θ为等号的连接,例如
ri=rjR⋈S表示连接满足
R.ri=S.rj关系的
R与
S中的元组
- 自然连接。自然连接是一种特殊的等值连接,就是
ri与
rj的属性名一致且值相等的等值连接,并在连接结果中去掉重复列,而在一般的等值连接中只需要满足
ri与
rj的值相等即可,记作
R⋈S。
- 外连接。外连接是一种特殊的自然连接,在自然连接的过程中,若连接后元组里的某个属性出现Null值就会舍去该元组,而外连接则会保留该元组。外连接分为三种:
- 1、外连接。保留两边关系自然连接后出现Null值属性的元组,记作
R:⋈:S
- 2、左外连接。保留左边关系自然连接后出现Null值属性的元组,记作
R:⋈S
- 3、右外连接。保留右边关系自然连接后出现Null值属性的元组,记作
R⋈:S
2.4 除 division
除关系运算记作:
R÷S={ tR[ri] ∣ tR∈R∧∏ rj(S)⊆rj tR[ri] }即取出
R中使
R.rj完全等于
S.rj的
R.ri元组
例如:
∏ Sname,Sage(R)÷∏ SageS表示取
R投影中使
R.Sage完全等于
S.age的
R.name元组,形成新的关系
2.5 专用关系运算举例
设
R:
color |
pattern |
size |
红 |
A |
5 |
红 |
B |
6 |
蓝 |
C |
8 |
蓝 |
D |
12 |
S:
pattern |
weight |
A |
3 |
B |
7 |
C |
10 |
C |
2 |
E |
2 |
-
R的选择,
σcolor=′红′(R),取出
R表中
color列值为字符串’红’的行形成新的关系:
color |
pattern |
size |
红 |
A |
5 |
红 |
B |
6 |
-
R的投影,
∏ color,size(R),从表
R取出
color,size列形成新的关系:
color |
size |
红 |
5 |
红 |
6 |
蓝 |
8 |
蓝 |
12 |
非等值连接,
size<weightR⋈S,连接满足
size<weight关系的
R与
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.pattern=S.patternR⋈S,连接满足
R.pattern=S.pattern关系的
R与
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与
S中同名属性值相等的元组:
color |
pattern |
size |
weight |
红 |
A |
5 |
3 |
红 |
B |
6 |
7 |
蓝 |
C |
8 |
10 |
蓝 |
C |
8 |
2 |
外连接,
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,保留左边关系自然连接后出现Null值属性的元组:
color |
pattern |
size |
weight |
红 |
A |
5 |
3 |
红 |
B |
6 |
7 |
蓝 |
C |
8 |
10 |
蓝 |
C |
8 |
2 |
蓝 |
D |
12 |
null |
右外连接,
R⋈:S,保留右边关系自然连接后出现Null值属性的元组:
color |
pattern |
size |
weight |
红 |
A |
5 |
3 |
红 |
B |
6 |
7 |
蓝 |
C |
8 |
10 |
蓝 |
C |
8 |
2 |
null |
E |
null |
2 |
则
R÷K表示取出
R中使
R.color完全等于
S.color、
R.size完全等于
S.size的
R.partten元组