代码改变世界

关系业务

2017-10-02 22:33  斗转星移17  阅读(178)  评论(0编辑  收藏  举报

 

                                                                           数据库系统概念第六版
                                                                           亚伯拉罕·西尔伯施塔茨
                                                                           耶鲁大学
                                                                           亨利·库斯
                                                                           利哈伊大学
                                                                           苏达汗
                                                                           印度理工学院,孟买 

 

       所有过程关系查询语言提供了一组可以执行的操作适用于单一关系或一对关系。 这些操作有他们的结果总是一个单一的关系的好的和期望的属性。 这个
属性允许以模块化的方式组合其中的几个操作。具体来说,由于关系查询的结果本身就是关系关系操作可以应用于查询的结果以及给定的集合关系。
       具体的关系操作根据不同而不同语言,但符合我们在本节中描述的一般框架。 在第3章,我们显示操作在SQL中的具体方式。最常见的操作是从单个的特定元组的选择关系(说教师),满足一些特定的谓词(说salary>$85,000个)。 结果是一个新的关系,它是原始关系的一个子集。例如,如果我们从图2.1的教师关系中选择元组,满足谓词“薪金大于$ 85000”,我们得到结果图2.10。
       另一个常见的操作是从a中选择某些属性(列)关系。结果是仅具有那些所选属性的新关系。对于例如,假设我们想要没有列表的教师ID和薪水的列表
来自图2.1的教师关系的名称和部门名称值,然后是结果如图2.11所示,具有两个属性ID和工资。

       每个元组 结果来自于教师关系的元组,但是仅被选择显示属性联合操作允许通过合并对来组合两个关系元组,一个从每个关系,成一个单一的元组。有一些不同的加入关系的方式(我们将在第3章中看到)。图2.12显示了一个例子用新的元组加入教官和部门表的元组显示每位讲师和她所在部门的信息
工作中。这个结果是通过组合教师中的每个元组形成的与教师部门关系的元组关系。
       以图2.12所示的连接形式,称为自然连接,一个元组如果他们的部门名称属性的值相同,则从指导关系匹配部门关系中的元组。所有这些匹配的元组是存在于加入结果中。一般来说,自然加入操作有两个关系匹配tupleswhose值在常见的所有属性名称上相同两国关系。
       笛卡尔乘积运算结合了元组元组,但与之不同连接操作,其结果包含来自两个关系的所有元组元组,不管他们的属性值是否匹配。

       因为关系是集合,我们可以对关系执行正常的集合操作。联合操作执行两个“类似结构化”表的集合(所有研究生的表和所有本科生的表)。例如,可以获得一个部门中所有学生的集合。其他套也可以执行诸如交叉和设置差异的操作。
       如前所述,我们可以对查询结果执行操作。例如,如果我们想找到有薪水的教师的身份证和工资超过85,000美元,我们将在我们的例子中执行前两个操作以上。首先我们选择那些从导师关系那里得到的元组值大于$ 85,000,然后从该结果中选择两个属性ID和工资,导致图2.13所示的关系由ID组成和薪水。 在这个例子中,我们可以执行这两个操作我们将会看到,所有情况都不是这样。
       有时,查询的结果包含重复的元组。 例如,如果从教师关系中选择dept name属性,有几种情况的重复,包括“Comp。 科学“,出现了三次。 某些关系语言严格遵守一套数学定义和删除重复。 其他的,考虑到相对较大的处理量需要从大型结果关系中删除重复项,保留重复。 在后一种情况下,这种关系在纯数学中并不是真正的关系这个词的意义。
      当然,数据库中的数据必须随着时间的推移而改变。 关系可以通过插入新的元组,删除现有的元组或修改元组来更新改变某些属性的值。整个关系可以删除和新创建的。
      我们将使用SQL语言来讨论关系查询和更新第3至5章。