2.5 关系数据操作基础
关系是集合,关系中的元组可以看做是集合的元素。因此,能在集合上执行的操作也能在关系上执行。
关系代数是一种抽象的查询语言,是关系数据操纵语言的一种传统表达方式,它是用对关系的运算来表达查询的。关系代数是封闭的,也就是说,一个或多个关系操作的结果仍然是一个关系。关系运算分为传统的集合运算和专门的关系运算。
2.5.1 集合运算
传统的集合运算包括并、差、交、广义笛卡儿积4种运算。
设关系A和关系B都具有n个属性,且相应属性值取自同一个值域,则可以定义并、差、交运算;积运算时,关系A和关系B的属性可以不同。
1.并运算
A∪B={t|t∈A∨t∈B}
关系A和关系B的并运算是指把A的元组与B的元组加在一起构成新的关系C。元组在C中出现的顺序无关紧要,但必须去掉重复的元组,即关系A和关系B并运算的结果关系C由属于A和属于B的元组构成,但不能有重复的元组,并且仍具有n个属性。关系A和关系B的并运算记作:A∪B或A+B。
2.差运算
A−B={t|t∈A∧t∉B}
关系A和关系B差运算的结果关系C仍为n目关系,由只属于A而不属于B的元组构成。关系A和关系B差运算记作:A-B。注意,A-B与B-A的结果是不同的。
3.交运算
A∩B={t|t∈A∧t∈B}
关系A和关系B交运算形成新的关系C,关系C由既属于A同时又属于B的元组构成并仍为n个属性。关系A和关系B交运算记作:A∩B。
【例2-7】设有关系R1和R2,如表2-6和表2-7所示。R1中是K社团学生名单;R2中是L社团学生名单。
表2-6 关系R1
表2-7 关系R2
对关系R1和关系R2分别进行并、差、交运算。结果如下。
1)R1+R2的结果是K社团和L社团学生名单,如表2-8所示。
表2-8 关系R1+R2
2)R1-R2的结果是只参加K社团而没有参加L社团的学生名单(比较R2-R1),如表2-9所示。
表2-9 关系R1-R2
3)R1∩R2的结果是同时参加了K社团和L社团的学生名单,如表2-10所示。
表2-10 关系R1∩R2
4.积运算
如果关系A有m个元组,关系B有n个元组,关系A与关系B的积运算是指一个关系中的每个元组与另一个关系中的每个元组相连接形成新的关系C。关系C中有m×n个元组。关系A和关系B积运算记作:A×B。
2.5.2 关系运算
关系运算(操作)包括投影、选择和连接。
1.投影
投影操作是指从一个或多个关系中选择若干个属性组成新的关系。投影操作取的是垂直方向上关系的子集(列),即投影是从关系中选择列。投影可用于变换一个关系中属性的顺序。
2.选择
选择操作是指从关系中选择满足一定条件的元组。选择取的是水平方向上关系的子集(行)。
【例2-8】关系student如表2-11所示,在此关系上的投影操作和选择操作示例如表2-12和表2-13。
表2-11 关系student
表2-12 关系st1
表2-13 关系st2
1)从关系student中选择部分属性构成新的关系st1的操作称为投影,关系st1如表2-12所示。
2)从关系student中选择部分元组构成新的关系st2的操作称为选择,关系st2如表2-13所示。
3.连接
选择操作和投影操作都是对单个关系进行的操作。在有的时候,需要从两个关系中选择满足条件的元组数据,对两个关系在水平方向上进行合作。连接操作即是这样一种操作形式,它是两个关系的积、选择和投影的组合。连接操作是从两个关系的笛卡儿积中选择属性间满足一定条件的元组的运算。连接也称为θ连接,θ表示连接的条件(比较运算),当θ比较运算为“=”运算时,连接称为等值连接。
自然连接是一种特殊的等值连接,它是在两个关系的相同属性上进行比较(等值比较)运算的结果中,去除重复属性而得到的结果。
等值连接和自然连接是连接操作中两种重要的连接操作。
【例2-9】关系A(如表2-14所示)与关系B(如表2-15所示)的等值连接,结果如表2-16所示。
表2-14 关系A
表2-15 关系B
表2-16 关系A与关系B的等值连接
【例2-10】关系A(如表2-14所示)与关系B(如表2-15所示)的自然连接,结果如表2-17所示。
表2-17 关系A与关系B的自然连接
这种连接运算在关系数据库中为INNER JOIN运算,称为内连接。
关系A和关系B进行自然连接时,连接的结果是由关系A和关系B公共属性(上述例题中为D属性)值相等的元组构成了新的关系,公共属性值不相等的元组不出现在结果中,被筛选掉了。如果在自然连接结果构成的新关系中,保留不满足条件的元组(公共属性值不相等的元组),在新增属性值填入NULL,就构成了左外连接、右外连接和外连接。
(1)左外连接
左外连接又称左连接,即以连接的左关系为基础关系,根据连接条件,连接结果中包含左边表的全部行(不管右边的表中是否存在与它们匹配的行),以及右边表中全部匹配的行。
连接结果中除了在连接条件上的内连接结果之外,还包括左边关系A在内连接操作中不相匹配的元组,而关系B中对应的属性赋空值。
【例2-11】关系A与关系B的左外连接,结果如表2-18所示。
表2-18 关系A与关系B的左外连接
(2)右外连接
右外连接又称右连接,即以连接的右关系为基础关系,根据连接条件,连接结果中包含右边表的全部行(不管左边的表中是否存在与它们匹配的行),以及左边表中全部匹配的行。
连接结果中除了在连接条件上的内连接结果之外,还包括右边关系B在内连接操作中不相匹配的元组,而关系A中对应的属性赋空值。
【例2-12】关系A与关系B的右外连接,结果如表2-19所示。
表2-19 关系A与关系B的右外连接
(3)全外连接
全外连接又称全连接,是左外连接和右外连接的组合应用。连接结果中包含关系A、关系B的所有元组,不匹配的属性均赋空值。
【例2-13】关系A与关系B的全连接,结果如表2-20所示。
表2-20 关系A与关系B的全连接
在以后的章节中将结合具体实例讨论与关系数据操作有关的命令。
至此,本书已经讨论了实际问题的建模方法,当一个问题的关系模型建立之后,这个关系模型在一个具体的DBMS中是如何实现的,包括数据结构的实现、数据完整性规则的实现和数据操作的实现,将在以后的章节中说明。