关系操作
关系操作所有过程关系查询语言提供一组操作,可以应用于单个关系或一对关系。这些操作具有良好和所需的属性,它们的结果始终是单个关系。此属性允许以模块的方式组合多个操作。具体来说,由于关系查询的结果本身就是一个关系,因此关系操作可以应用于查询的结果以及给定的关系集。具体的关系操作以不同的语言表达,但是符合我们在本节中描述的一般框架。在第三章中,我们用SQL展示具体的操作方式。最常见的操作是选择满足某个特定谓词的单个关系的特定元组(比如工资> $ 85,000)。结果是一种新的关系,它是原始关系的子集。
(在图2.10中,查询选择教员这一元祖的结果,其工资大于$ 8500 . structor)。例如,如果我们从图2.1的教员关系中选择元祖,满足谓词“工资大于$ 85000”,我们将得到结果显示在图2.10。
另一个常见的操作是从关系中选择某些属性(列)。结果是只有选定属性的新关系。例如,假设我们想要一个教员ID和薪水列表,而不列出图2.1的教员关系中的名称和dept名称值,那么结果如图2.11所示,有两个属性ID和salary。结果中的每元祖都来自于一个教师关系的元组,但只显示所选的属性。
连接操作允许将两个关系的组合合并成一个元组,将两个关系中的一个元组合并成一个元组。有许多不同的方式来连接关系(我们将在第3章中看到)。图2.12显示了一个从教师和部门表中加入元组的例子,新的元组显示了关于每个教师和她正在工作的部门的信息。这一结果是通过将教师关系中的每个元组与教师系的部门关系中的元组相结合而形成的。
在图2.12所示的连接形式中,它被称为自然连接、元组。在值关系中,教师关系从部门关系中匹配一个元组。
查询从教练关系选择属性ID和薪酬图2.11结果
第二章 关系模型的介绍
图2.12 教师与部门关系自然连接的结果
在图2.12中所示的连接形式中,它被称为自然连接,如果讲师关系表中的一个元组和部门关系表中的一个元组的部门名称(dept_name)属性的值相同,则它们两个相匹配,所有这些匹配的元组都出现在连接结果中。一般来说,两个关系中的自然连接操作,会连接在两个关系表中共有的,所有的值相匹配的属性名元组。
“笛卡尔积”结合了两个关系表中的元组,但是不像连接操作,它的结果包含了两个关系中的所有元组,不管它们的属性值是否匹配。
因为关系表是集合,所以我们可以执行基本的子集关系操作。并(union)操作合并两个“类似结构”的表(比如所有研究生的表和所有本科生的表)。例如,你可以在部门中获得所有学生的集合。还有其他的集合关系操作,例如交(intersection)和集合差也可以被执行。
如前所述,我们可以对查询结果执行操作。例如,如果我们想找到那些年薪超过8.5万美元的教师的ID和薪水,我们就会执行前面例子中提到过的前两个操作。首先,我们从教师关系中选择这些元组,其中的工资值大于$85000,然后从这个结果中选择两个属性:ID和薪水,结果如图2.13所示,其中包含了ID和薪水。
图2.13“工资超过了8.5万美元的教师”查询结果
关系代数
关系代数关系定义了一组操作,平行的通常的代数运算,如加法、减法和乘法,这
数字运算。正如代数运算的数量,把一个或多个数字输入和输出返回一个数,关系代数运算—人通常以一个或两个关系作为输入并返回一个关系输出。
关系代数中讨论在6章中,我们勾勒出几下面的操作
在本例中,我们可以以任意顺序执行操作,但若所有情况下都不是这样,我们将看到。
有时,查询的结果包含重复的元组。例如,如果我们从教师关系中选择部门名称属性,有几个案例的重复,包括“Comp.sci”,它出现了三次。某些关系语言严格遵循一个集合的数学定义,并删除副本。另外,考虑到从大型结果关系中删除副本所需的大量处理,所以保留副本。在后一种情况下,关系并不是纯粹的数学意义上的关系。
当然,数据库中的数据必须随时间变化。一个关系可以通过插入新的元组、删除已有的元组或修改元组来更新改变某些属性的值。可以删除整个关系,并创建新的关系。
我们将使用SQL语言讨论关系查询和更新3到5章。
内容翻译自:《数据库系统概念(第6版)》
作者:Abraham Silberschatz·Henry F.Korth·S.Sudarshan