关系操作
源自:数据库系统概论(第六版) 2.6关系操作
作者:Abraham Silberschatz Henry F.Korth S.Sudarshan
翻译:刘琼滨 谢雪妮 赖慧芳 许雅莉
译文:
所有过程关系查询语言都提供了一组操作,可以应用于单个关系或一对关系。这些操作具有所需的良好的属性,它们的结果始终是单个关系。此属性允许以模块方式组合多个操作。具体来说,由于关系查询的结果本身就是一个关系,因此关系操作可以应用于查询以及给定关系集。
具体的关系操作以不同的语言表达,但是符合我们在本节中描述的一般框架。在第3章中,我们展示了用SQL表示的具体操作方式。
最常见的操作是选择满足某个特定谓词的单个关系的特定元组(比如工资> $ 85,000)。结果是一个新的关系,它是原始关系的一个子集。(如图2.10查询的结果是选择教练元组工资超过8500美元的关系)
例如,如果我们从图2.1的讲师关系中选择元组,满足“工资大于$ 85000”,我们将得到如图2.10所示的结果。
另一个常见的操作是从关系中选择某些属性(列)。结果是只有选定属性的新关系。例如,假设我们想要一个教员ID和薪水列表,而不列出图2.1的教员关系中的名称和dept名称值,那么结果如图2.11所示,有两个属性ID和salary。结果中的每个元组都来自于一个教师关系的元组,但只显示所选的属性。
连接操作允许通过合并双元组结合两个关系,分别来自每个关系,连接成一个元组。有许多不同的方式来连接关系(就像我们将在Chapter3中看到的那样)。图2 . 12显示了从指导者和department表中加入元组的示例,其中显示了每个教师和她工作的部门的信息。这一结果是由教师与系里关系中的每个元组相结合而形成的。
在图2.12中所示的连接形式(称为“自然连接”)中,如果其dept名称属性的值相同,则来自教师关系的元组与department关系中的元组相匹配。所有这些匹配的元组都出现在连接结果中。一般来说,两种关系的自然连接操作都匹配元组,它们的值对于两种关系中的所有属性名称都是相同的。
图2.11 从教师关系中查询的属性ID和工资的结果。
图2.12 教师和部门关系的自然连接的结果
笛卡尔积结合了两个关系中的元组,但不同于连接操作,笛卡尔积的结果包含了两个关系中的所有元组,不管它们的属性值是否匹配。
因为关系是集,我们可以在关系上执行正常的集操作。并操作执行了两个“类似结构”表的集合(比如所有研究生的表和所有本科生的表)。例如,一个部门可以获得所有学生的集合。其他的集合操作,例如intersection和set difference也可以执行。
如前所述,我们可以对查询的结果执行操作。例如,如果我们想找到那些年薪超过8.5万美元的教师的ID和薪水,我们将在上面的例子中执行前两个操作。首先,我们从教师关系中选择这些元组,其工资值大于85,000美元,然后从这个结果中选择两个属性ID和工资,结果如图2.13所示的关系
图2.13选择工资超过8.5万美元的教师的属性ID和工资
关系代数定义了一组对关系的操作,将通常的代数运算(如加法、减法或乘法)与数字运算。正如数字上的代数运算将一个或多个数字作为输入,并作为输出返回一个数字,关系代数运算通常以一或两种关系作为输入,并返回一个关系作为输出。
关系代数在Chapter6中有详细的介绍,但我们将概述了下面的一些操作。
符号(名称) |
使用例子 |
?(选择) |
? salary>=85000(instructor) 返回关系中满足给定条件的诸元组 |
Π(投影) |
Π ID,salary(instructor) 从输入的关系中输出指定属性,移除重复的元组组成心的关系 |
(连接) |
instructordepartment 在具有相同名称的所有属性上具有相同值的两个输入关系的输出诸元组 |
X(笛卡尔积) |
Instructor X department 输出来自两个关系的所有元组(不管它们是否具有相同的公共属性值) |
U(并) |
Π name(instructor)u Π name(student) 从两个输入关系输出元组的联合。 |
在本例中,我们可以按任意顺序执行操作,但正如我们将看到,不是在所有情况下都会这样
有时,查询的结果包含重复的元组。例如,如果我们从教师关系中选择dept name属性,就会出现一些重复的情况,如“Comp.Sci”出现了三次。某些关系语言严格遵循集合的数学定义,并会删除重复。但考虑到从大型结果关系中删除副本需要大量处理,保留副本。在后一种情况下,这种关系就不是纯粹的数学意义上的关系。
当然,数据库中的数据必须随着时间的推移而改变。可以通过插入新元组、删除现有元组或通过更改某些属性的值修改元组来更新关系。整个关系可以被删除,也可以创建新的关系。
我们将在第3至5章中使用SQL语言讨论关系查询和更新。