关系操作

关系操作

所有的过程关系查询语言都提供了一组可以进行的操作适用于单个关系或一对关系。这些操作他们的结果总是一个单一的关系。这属性允许一个模块以一种模块化的方式组合这些操作。 具体来说,因为关系查询的结果本身就是关系,关系操作可以应用于查询的结果,也可以应用于给定的集合关系。

具体的关系操作以不同的方式表示语言,但符合我们在这一节中描述的一般框架。在第三章, 我们展示了用SQL表示操作的具体方式。

最常见的操作是选择特定的元组(比如教师)来满足某些特定的谓词(比如工资和工资; 85000美元)。结果是一种新的关系,它是原始关系的子集(内结构)。例如,如果我们从图2.1的讲师关系中选择元组, 满足谓词“工资大于$85000”,我们得到的结果是 图2.10

另一个常见的操作是从a中选择某些属性() 关系。结果是只有那些选择的属性的新关系。例如,假设我们想要一个没有清单的教师id和薪水的列表名称和dept的名称值来自于图2.1的讲师关系,然后结果如图2中所示,具有两个属性ID和薪水。每一个元组结果是由讲师关系的一个元组衍生而来的,但只被选中属性显示。

 连接操作允许通过合并对两个关系的组合元组,一个从每个关系到一个元组。有很多不同的地方 连接关系的方法(如我们将在第3章中看到的)。 使用新的元组从教师和部门表中加入元组展示每个讲师和她所在部门的信息是有效的。这个结果是通过将每个元组组合在一起形成的与元组的关系,与教师系的部门关系。

在图2.12中所示的连接形式中,它被称为自然连接,一个元组如果它们的dept名称属性是相同的。所有这些匹配的元组都是在连接结果中显示。一般来说,两种关系的自然连接操作匹配所有属性名称相同的元组,它们的值是相同的对于常见的两个关系。

笛卡尔产品运算结合了两种关系中的元组,但不像这种连接操作,它的结果包含两个关系中的所有元组,不管它们的属性值是否匹配。

因为关系是集合,所以我们可以对关系进行正常的集合操作。 union操作执行两个“相似结构”表的集合 (比如一张所有研究生的桌子和一张所有本科生的桌子)。 例如,一个部门可以获得所有学生的集合。另一组操作,例如交叉和设置差异也可以执行。

如前所述,我们可以对查询结果执行操作。例如,如果我们想找到那些有薪水的教师的身份证和工资超过8.5万美元,我们将在示例中执行前两个操作以上。首先,我们从教师关系中选择这些元组值大于$85000,然后从这个结果中选择两个属性ID和薪水,导致如图2.13所示的关系,包括ID和薪水。在本例中,我们可以执行以下操作,但这不是所有情况下的情况,就像我们将会看到。

有时,查询的结果包含重复的元组。例如,如果我们 从教师关系中选择dept name属性,有几种情况的重复,包括“Comp。科学。,它出现了三次。某些相关的语言严格遵循一组的数学定义和移除。其他的,考虑到相对大量的处理 要求从大型结果关系中删除重复的副本,保留副本。在后一种情况,关系在纯数学中不是真正的意义上的术语。

当然,数据库中的数据必须随时间变化。一个关系可以通过插入新的元组,删除已有的元组,或者通过改变某些属性的值来修改元组。整个关系可以被删除和创建一个新的。

我们将使用SQL语言讨论关系查询和更新在第3到5章。

来源于作者:

 Abraham Silberschat
 Henry F. Korth
 S. Sudarshan
 
posted @ 2017-10-15 23:44  Hu-Fan  阅读(821)  评论(0编辑  收藏  举报