一、前言
本文将讲述有关于关系代数的知识点,并附例题加深印象
二、概述
- 抽象的查询语言
- 用对关系的运算来表达查询
- 运算对象:关系
- 运算结果:关系
- 运算符:传统集合运算符 和 专门的关系运算符
三、传统的集合运算符
1.概述
- 将关系看作是元组的集合
- 运算是从行的角度进行的
- 其中包括并、差、交 和 笛卡儿积
2.∪(并)
R∪S={ t | t∈R ∨ t∈S }
简单来说,就是把两个关系中所有的元素合并成一张表
例如:
关系R
A | B | C |
1 | 2 | 3 |
4 | 5 | 6 |
7 | 8 | 9 |
关系S
A | B | C |
1 | 2 | 3 |
0 | 5 | 6 |
7 | 3 | 9 |
那么 R∪S 为:
A | B | C |
1 | 2 | 3 |
4 | 5 | 6 |
7 | 8 | 9 |
0 | 5 | 6 |
7 | 3 | 9 |
3.∩(交)
R∩S={ t | t∈R ∧ t∈S }
简单来说,就是把两张表格中相同的元素提取出来,组成一个新的表
例如:
关系R
A | B | C |
1 | 2 | 3 |
4 | 5 | 6 |
7 | 8 | 9 |
关系S
A | B | C |
1 | 2 | 3 |
0 | 5 | 6 |
7 | 3 | 9 |
那么 R∩S 为:
A | B | C |
1 | 2 | 3 |
4.-(差)
R-S={ t | t∈R ∧ t∉S }
简单来说,就是将R中两个关系中共同元素去除
例如:
关系R
A | B | C |
1 | 2 | 3 |
4 | 5 | 6 |
7 | 8 | 9 |
关系S
A | B | C |
1 | 2 | 3 |
0 | 5 | 6 |
7 | 3 | 9 |
那么 R-S 为:
A | B | C |
4 | 5 | 6 |
7 | 8 | 9 |
5.笛卡儿积
R×S={(x,y)|x∈R∧y∈S} 这个有点难以理解。。。那么直接看例子吧
例如:
关系R
A | B | C |
1 | 2 | 3 |
4 | 5 | 6 |
7 | 8 | 9 |
关系S
A | B | C |
1 | 2 | 3 |
0 | 5 | 6 |
7 | 3 | 9 |
那么 R×S 为:
R.A | R.B | R.C | S.A | S.B | S.C |
1 | 2 | 3 | 1 | 2 | 3 |
1 | 2 | 3 | 0 | 5 | 6 |
1 | 2 | 3 | 7 | 3 | 9 |
4 | 5 | 6 | 1 | 2 | 3 |
4 | 5 | 6 | 0 | 5 | 6 |
4 | 5 | 6 | 7 | 3 | 9 |
7 | 8 | 9 | 1 | 2 | 3 |
7 | 8 | 9 | 0 | 5 | 6 |
7 | 8 | 9 | 7 | 3 | 9 |
我们设R是n目关系,有K1个元组,S是m目关系,有K2个元组,那么他们的笛卡儿积其实就是排列组合,如果将R关系中的每一行看作是abc,S关系中的每一行看作是xyz,那么他们两两组合的方式一共有9种,故 当R有K1个元组,S有K2个元组时,R和S的笛卡儿积行一共有K1×K2个元组;而由于每个关系里都有各自属性,所以R和S的笛卡儿积列一共有(m+n)个元组
PS:如果概念性语言描述不清楚的话,可以看这篇【关系模型知识点总结(1)—— 关系数据结构】里面有对专业名词的解释
四、专门的关系运算
1.概述
- 从关系R中选取使得逻辑表达式F为真的元组
- F:选择条件,即逻辑表达式,取值为真/假,一般形式为X1θY1,θ为> / < / <= / >= / <>
- 从行的角度运算
2.记号
- 关系R(A1,A2,···,An),t∈R表示t是R的元组
- t[Ai]代表元组t中相应于属性Ai的分量
- 若 A={Ai1,Ai2,···,Aik},则 A是属性列/属性组
- t[A]=(t[Ai1],t[Ai2],···,t[Aik])表示元组t在数学列A上每个分量的集合
3.象集
- 给定一个关系R(X,Z),X和Z为属性组
- 当t[X]=x,x在R中象集定义为 Zx={ t[Z] | t∈R,t[X] =x }
列如:
A | B |
X1 | Z1 |
X1 | Z2 |
X1 | Z3 |
X2 | Z4 |
X2 | Z5 |
X3 | Z6 |
X1在R中的象集ZX1 = {Z1,Z2,Z3}
X2在R中的象集ZX2 = {Z4,Z5}
X3在R中的象集ZX2 = {Z6}
4.选择
- σF ( R ) {t|t∈R∧F(t)=‘真’}
- 提取出来的是某一行
列如:
Student
ID | Name | Sdept |
001 | 张三 | CS |
002 | 李四 | IS |
003 | 王五 | MA |
σ Sdept=‘CS’(Student) 结果为:
ID | Name | Sdept |
001 | 张三 | CS |
5.投影
- ΠA( R )={ t[A] | t∈R }
- 从列的角度来运算
- 将提取出来的属性及值组成新的关系
- 若有重复元组,要取消
例如:
Student
ID | Name | Sdept |
001 | 张三 | CS |
002 | 李四 | IS |
003 | 王五 | MA |
ΠSdept(Student)的结果为:
Sdept |
CS |
IS |
MA |
6.连接
- 从两个关系的笛卡尔积中选取属性间满足一定条件的元组
- 同名属性才能进行自然连接
- 自然连接要去掉重复属性,等值连接不用
🔴等值连接
例如:
R
A | B | C |
a1 | b1 | 5 |
a1 | b~12 | 6 |
a2 | b3 | 8 |
a2 | b4 | 12 |
S
B | E |
b1 | 3 |
b2 | 7 |
b3 | 10 |
b3 | 2 |
b5 | 2 |
等值连接后结果为:
A | R.B | C | S.B | E |
a1 | b1 | 5 | b1 | 3 |
a1 | b~12 | 6 | b2 | 7 |
a2 | b3 | 8 | b3 | 10 |
a2 | b3 | 8 | b3 | 2 |
🔴自然连接
例如:
R
A | B | C |
a1 | b1 | 5 |
a1 | b~12 | 6 |
a2 | b3 | 8 |
a2 | b4 | 12 |
S
B | E |
b1 | 3 |
b2 | 7 |
b3 | 10 |
b3 | 2 |
b5 | 2 |
自然连接后结果为:
A | B | C | E |
a1 | b1 | 5 | 3 |
a1 | b~12 | 6 | 7 |
a2 | b3 | 8 | 10 |
a2 | b3 | 8 | 2 |
7.悬浮元组
- 操作时被舍弃的元组
例如:
R
A | B | C |
a1 | b1 | 5 |
a1 | b~12 | 6 |
a2 | b3 | 8 |
a2 | b4 | 12 |
S
B | E |
b1 | 3 |
b2 | 7 |
b3 | 10 |
b3 | 2 |
b5 | 2 |
在进行连接时,下面两组都是被舍弃的元组,因为属性值不相同,他们就是悬浮元组
A | B | C |
a2 | b4 | 12 |
B | E |
b5 | 2 |
🔴外连接
将悬浮元组保存在关系中,在其它属性填上空值(NULL) 简单来说,就是把表中所有元素都填到新表中,如果某行或者某列中只有一个关系有值,另一个没有,就用NULL代替
A | B | C | E |
a1 | b1 | 5 | 3 |
a1 | b~12 | 6 | 7 |
a2 | b3 | 8 | 10 |
a2 | b3 | 8 | 2 |
a2 | b4 | 12 | 2NULL |
NULL | b5 | NULL | 2 |
🔴左外连接
只保留左边关系R的悬浮元组 简单来说,就是保证R中所有元素都在新表里面了,这行中S的某个属性没有值的话,用NULL代替
A | B | C | E |
a1 | b1 | 5 | 3 |
a1 | b~12 | 6 | 7 |
a2 | b3 | 8 | 10 |
a2 | b3 | 8 | 2 |
a2 | b4 | 12 | 2NULL |
🔴右外连接
只保留右边关系S的悬浮元组 简单来说,就是保证S中所有元素都在新表里面了,这行中R的某个属性没有值的话,用NULL代替
A | B | C | E |
a1 | b1 | 5 | 3 |
a1 | b~12 | 6 | 7 |
a2 | b3 | 8 | 10 |
a2 | b3 | 8 | 2 |
NULL | b5 | NULL | 2 |
8.除运算
列如:
R
A | B | C |
a1 | b1 | c2 |
a2 | b3 | c7 |
a3 | b4 | c6 |
a1 | b2 | c3 |
a4 | b6 | c6 |
a2 | b2 | c3 |
a1 | b2 | c1 |
S
B | C | D |
b1 | c2 | d1 |
b2 | c1 | d1 |
b2 | c3 | d2 |
我们来求a1、a2、a3、a4的象集
a1:{ (b1,c2),(b2,c3),(b2,c3)}
a2:{(b3,c7),(b2,c3)}
a3:{(b4,c6)}
a4:{(b6,c6)}
S在B、C上投影为{ (b1,c2),(b2,c3),(b2,c3)}
所以R÷S = {a1}
五、结语
概念如果混淆不清的话,建议独立做例题,这样可以加深记忆