关系代数
关系代数是一种抽象的查询语言,是关系数据操纵语言的一种传统表达方。式,它是用对关系的运算来表达查询的。
任何一种运算都是将一定的运算符作用于一定的运算对象上,得到预期的运算结果。所以运算对象、运算符、运算结果是运算的三大要素。
关系代数的运算对象是关系,运算结果亦为关系。关系代数用到的运算符包括四类:集合运算符、专门的关系运算符、算术比较符和逻辑运算符,如表1所示。
表1 关系代数运算符
关系代数的运算按运算符的不同可分为传统的集合运算和专门的关系运算两类。
其中传统的集合运算将关系看成元组的集合,其运算是从关系的“水平”方向即行的角度来进行。而专门的关系运算不仅涉及行而且涉及列。比较运算符和逻辑运算符是用来辅助专门的关系运算符进行操作的。
一 传统的集合运算
传统的集合运算是二目运算,包括并、差、交、广义笛卡尔积四种运算。
设关系R 和关系S 具有相同的目n (即两个关系都有n 个属性),且相应的属性取自同一个城,则可以定义并、差、交运算如下:
1. 并(Union)
关系R 与关系S 的并记作:
R ∪ S = { t | t ∈ R ∨ t ∈ S }
其结果仍为n 目关系,由属于R 或属于S 的元组组成。
2. 差(Difference)
关系R 与关系S 的差记作:
R-S = { t | t ∈ R ∧ t /∈ S }
其结果关系仍为n 目关系,由属于R 而不属于S 的所有元组组成。
3. 交( Intersection)
关系R 与关系S 的交记作:
R ∩ S = { t | t ∈ R ∧ t ∈ S }
其结果关系仍为n 目关系,由既属于R 又属于S 的元组组成。关系的交可以用差来表示,即R ∩ S=R- (R -S )。
4. 广义笛卡尔积(Extended Cartesian Product)
两个分别为 n 目和m 目的关系 R 和S 的广义笛卡尔积是一个(n +m )列的元组的集合。元组的前n 列是关系R 的一个元组,后m 列是关系S 的一个元组。若R 有k 1 个元组,S 有k 2 个元组,则关系R 和关系S 的广义笛卡尔积有k 1 × k 2 个元组。记作:
R × S = { tr ts | tr ∈ R ∧ ts ∈ S }
图1(a)、图1(b)分别为具有三个属性列的关系R ,S 。图1(c)为关系R 与S 的并。图1(d)为关系R 与S 的交。图1(e)为关系R 和S 的差。图1(f)为关系R 和S 的广义笛卡尔积。
(a) (b)