前言
在前面两节中,已经学习了关系的形式化定义以及有关概念、关系的有关操作、关系的三类完整性约束,接下来我们将介绍关系数据库系统中关系操作的一种语言——关系代数。
关系代数是一种抽象的查询语言,它用对关系的运算来表达查询。运算的三大要素为:运算对象、运算符、运算结果。关系代数的运算对象是关系,运算结果亦为关系。关系代数用到的运算符包括两类:集合运算符和专门的关系运算符。
一.传统的集合运算
传统的集合运算是二目运算,包括并、差、交、笛卡尔积4种运算。
设关系R和关系S具有相同的目n(即两个关系都有n个属性),且相应的属性取自同一个域,t是元组变量,t∈R表示t是R的一个元组。
下面为了方便展示与理解,我们引入关系R和S如下表:
1.并
,其结果仍为n目关系,由属于R或属于S的元组组成。上述关系R和S的并可以表示如下,可以发现,重复的元组只需要书写一遍。
2.差
,其结果关系仍为n目关系,由属于R而不属于S的所有元组组成。上述关系R和S的差可以表示如下,R-S中,其实寻找的就是独属于R自己本身的一些元组。
3.交
,其结果关系仍为n目关系,由既属于R又属于S的元组组成。上述关系R和S的交可以表示如下。
4.笛卡尔积⭐
两个分别为n目和m目的关系R和S的笛卡尔积是一个n+m列的元组的集合。元组的前n列是关系R的一个元组,后m列是关系S的一个元组。若R有k1个元组,S有k2个元组,则关系R和关系S的笛卡尔积有k1×k2个元组。记作:。上述关系R与S的笛卡尔积可以表示如下。进行运算之前,关系R共有3目,3个元组,关系S共有3目,3个元组;进行笛卡尔积之后,R×S中,共包含(3+3)=6目(即6列),3*3=9个元组(即9行)。
笛卡尔积与前三种运算不一样,并、差、交运算过后,保持原关系目数不变,而笛卡尔积改变了原关系的目数,熟记笛卡尔积运算过后的目数以及元组个数计算方法。
二、专门的关系运算
1.选择
选择又称为限制。它是在关系R中选择满足给定条件的诸元组【行操作】,记作:,其中F表示选择条件,它是一个逻辑表达式,取逻辑值“真”或“假”。
逻辑表达式F的基本形式为:X1θY1
其中θ表示比较运算符,它可以是>,≥,<,≤,=或<>(不等于)。X1,Y1等是属性名,或为常量,或为简单函数;属性名也可以用它的序号来代替。
可以来看几个例子更好的理解这种运算,在使用或者书写时,σ表示进行选择操作,而在其右下角给出了具体的选择条件,括号中则体现了在哪一组关系中进行选择,那么,例2.4给出的表达式的具体含义便为在学生关系Student中,寻找Sdet属性为“IS”的学生。简单来讲,其实这里面的选择的运算和Excel中的筛选功能相似,可以参考记忆。
2.投影
关系R上的投影是从R中选择出若干属性列组成新的关系。记作:
其中A为R中的属性列。投影操作是从列的角度进行的运算【列操作】。
下面来看例子,在使用或者书写时,Π表示进行投影操作,在其右下角表示着要进行投影的属性【就是要选出的列】,括号中则体现着对哪个关系表进行操作。那么,例2.6给出的表达式的具体含义为在学生关系Student中,对Smane、Sdept两列进行投影,即选择这两列构成新的关系。在投影操作中,重复的分量会被避免重复出现,仅显示一次。
3.连接⭐
连接也称为θ连接。它是从两个关系的笛卡儿积中选取属性间满足一定条件的元组。记作:,其中,A和B分别为R和S上列数相等且可比的属性组,θ是比较运算符。连接运算从R和S的笛卡儿积R×S中选取R关系在A属性组上的值与S关系在B属性组上的值满足比较关系θ的元组。
下面介绍两种特殊的连接
下面通过具体的例子更好的理解连接
在例2.8中,非常好的展示了种种连接之间的区别与联系,(c)中,满足C<E这一要求的元组才会被选择进入关系;(d)中,利用关系R与关系S中都有的B属性进行等值比较,相等的元组进行连接;(e)是对(d)的进一步操作,删除了(d)中的重复列,其余部分无变化。
在进行连接操作中,有些元组不会被使用,从而被舍弃,他们被称为悬浮元组。如果在连接中,用“NULL”进行填补,这种连接叫作“外连接”。如果仅保留左边的悬浮元组,称为“左外连接”;如果仅保留右边的悬浮元组,称为“右外连接”。
上图很明显的展示了三种“外连接”,(a)的倒数第二行的元组来自于关系R,而在关系S中,无法进行连接,因此用“NULL”填补,最后一行同理。然后根据保留左边或者右边分为左外连接或者右外连接。