2.4 关系代数
关系代数是一种抽象的查询语言,它用对关系的运算来表达查询。
运算的三大要素:
1.运算对象
2.运算符
3.运算结果
关系代数的运算对象是关系,运算结果也为关系。
关系代数用到的运算符包括两类:
1.集合运算符
2.专门的关系运算符
关系代数的运算按运算符的不同可以分为:
1.传统的集合运算:
传统的集合运算将关系看成元组的集合,其运算是从关系的“水平”方向进行,即行的角度来进行。
2.专门的关系运算:
专门的关系运算不仅涉及行而且涉及列。使用比较运算符和逻辑运算符来辅助专门的关系运算符进行操作。
2.4.1 传统的集合运算
传统的集合运算是二目运算,包括并、差、交、笛卡尔积4种运算。
设关系R和关系S具有相同的目n,即两个关系都有n个属性,且相应的属性取自同一个域,t是元组变量,t∈R表示t是R的一个元组。
- 相容性:
两个关系具有相同的目。
两个关系相应的属性取自同一个域。
1. 并(基本运算)
关系R与关系S的并记作,R∪S = { t | t∈R ∨ t∈S } ,其结果仍为n目关系,由属于R或属于S的元组组成。
并为行的并,所有行合成一个表,除去重复的。
2. 差(基本运算)
关系R与关系S的差记作,R-S ={ t | t∈R ∧ t∉S } ,其结果仍为n目关系,由属于R而不属于S的所有元组组成。
3. 交(非基本运算)
关系R与关系S的交记作,R∩S ={ t | t∈R ∧ t∈S } ,其结果关系仍为n目关系,由 既 属于R 又 属于S的元组组成。关系的交可以用差来表示,即 R∩S = R - (R-S)。
4. 笛卡尔积(基本运算)
两个分别为n目和m目的关系R和S的笛卡尔积是一个 (n+m)列 的元组的集合(不具有相容性)。元组的前n列为关系R的一个元组,后m列是关系S的一个元组。
若R有k1个元组,S有k2个元组,则关系R和关系S的笛卡尔积有 k1 * k2个元组 。记作
2.4.2 专门的关系运算
专门的关系运算包括选择、投影、连接、除运算等
引入记号:
- 设关系模式为R(A1,A2,…,An),它的一个关系设为R。t∈R表示 t 是R的一个元组。t[Ai] 则表示元组 t 中相应于属性 Ai 的一个分量。即为元组中一个属性的值。
- 若A = { Ai1,Ai2,…,Aik },其中Ai1,Ai2,…,Aik是A1,A2,…,An中的一部分,则称A为属性列或属性组。t[Ai] = ( t[Ai1],t[Ai2],…,t[Aik] )表示元组 t 在属性列A上诸分量的集合。
即对关系R和关系S的属性进行拼接
设有一个学生-课程的数据库,包括学生关系Student,课程关系Course,选修关系SC,后面的多个例子将会对这三个关系进行运算。
1. 选择(基本运算)
选择又称限制。它是在关系R中选择满足给定条件的诸元组,记作:
其中F表示选择条件,它是一个逻辑表达式,取逻辑值“真”或“假”。
逻辑表达式F的基本形式为:X1 θ Y1 ,其中 θ 表示比较运算符,X1,Y1等是属性名,或为常量,或为简单函数,属性名可以使用属性的序号来代替。在基本选择的条件上可以进一步进行逻辑运算。