关系运算
所有的步骤性的关系查询语言提供一系列能被应用到单个联系或一系列联系中的运算。这些运算有极佳的和足够的性能来保证他们的结果总是能够保持唯一的联系。这个性能允许某个运算能够以一种模块化的方式整合这些运算。特别的是,因为关系查询的结果其自身就是一项关系,关系运能被应用到查询结果和建立一系列联系之中。
独特的关系运算实现的不同结果取决于独特的编程语言,并且适用于我们在某方面所构建的一般框架。在章节三中,我们介绍在SQL中所运用的特殊关系运算。
使用的最频繁关系运算是在单个满足一些特殊的要求(薪水大于85000美元)的关系(开发者建立)中的元组。这项结果也是一项新的作为最初关系中的子集的联系。例如如果
ID |
Name |
Dept-name |
Salary |
12121 |
Wu |
Finance |
90000 |
22222 |
Einstein |
Physics |
95000 |
33456 |
Gold |
Physics |
87000 |
83821 |
Brandt |
Comp.Sci |
92000 |
表2.10 查询选择元组薪水远大于85008美元的结果
我们选择来自图2.1中指导关系的元组,满足预期“薪水远大于85000美元”的要求,我们将结果在表2.10显示出来。
另一项使用频繁的运算是在一项关系中选择准确的属性(列)。其他频繁操作是选择某些属性(列)的关系。结果是一个新的关系只有那些选择属性。例如,假设我们想要一个教练ID列表和薪水没有清单名称和部门名称的值从图2.1的教练关系,然后结果,如图2.11所示,有两个属性ID和薪水。结果是来自一个元组中的每个元组的教练关系但只有选定的属性显示。
连接操作允许两个关系的结合通过合并双元组,分别来自关系,成一个元组。有许多不同的方式加入关系(如第三章中我们将看到)。图2.12显示了一个示例的加入从导师和部门表元组与新元组显示了每个老师的信息,她的部门工作。这个结果是由教练关系中的每个元组结合部门关系中的元组老师的部门。加入的形式如图2.12所示,叫做自然的加入,一个元组的教练关系匹配的元组部门关系值。
加入的形式如图2.12所示,叫做自然的加入,一个元组的教练关系匹配的元组部门关系,如果他们的部门名称属性的值是相同的。所有这些匹配双元组中加入的结果。一般来说,自然连接操作两个关系匹配的元组的值是相同的所有属性名称是常见的两种关系。
ID |
Salary |
10101 |
65000 |
12121 |
90000 |
15151 |
40000 |
22222 |
95000 |
32343 |
60000 |
33456 |
87000 |
45665 |
75000 |
58583 |
62000 |
76543 |
80000 |
76766 |
72000 |
83821 |
92000 |
98345 |
80000 |
图2.11 查询的结果从教练选择属性ID和工资关系。
ID |
Name |
Salary |
Dept-name |
Building |
Budget |
10101 |
Srinivasan |
65000 |
Comp. Sci |
Taylor |
100000 |
12121 |
Wu |
90000 |
Finance |
Painter |
120000 |
15151 |
Mozart |
40000 |
Physics |
Packard |
80000 |
22222 |
Einstein |
95000 |
History |
Watson |
70000 |
32343 |
El Said |
60000 |
Physics |
Painter |
50000 |
33456 |
Gold |
87000 |
Comp. Sci. |
Watson |
70000 |
45565 |
Katz |
75000 |
History |
Taylor |
100000 |
58583 |
Califieri |
62000 |
Finance |
Painter |
50000 |
76543 |
Singh |
80000 |
Biology |
Painter |
120000 |
76766 |
Crick |
72000 |
Comp. Sci |
Watson |
90000 |
83821 |
Brandt |
92000 |
Elec.Eng |
Taylor |
100000 |
98345 |
Kim |
80000 |
Physics |
Taylor |
85000 |
表2.12 结果自然加入导师和部门的关系
Cartesi一个产品操作结合元组从两个关系,但与连接操作,其结果包含所有成对的元组的两个关系,不管他们的属性值是否匹配。因为关系集,我们可以执行正常组操作的关系。联盟操作执行一组联盟的两个“类似的结构化”表(例如一个表的所有研究生和本科生的表)。例如,一个可以获得的所有的学生都在一个部门。另一组操作,如十字路口并设置不同也可以被执行。正如我们前面提到的,我们可以执行操作的查询的结果。例如,如果我们想要找到那些教练的ID和工资大于85000美元,我们将执行两个操作在我们上面的例子。首先我们从老师选择这些元组关系的工资价值大于85000美元,然后,从这个结果,选择两个属性ID和工资,导致组成的图2.13中所示的关系ID和薪水。在这个例子中,我们可以以任意顺序执行操作,但这
ID |
Salary |
12121 |
90000 |
22222 |
95000 |
33456 |
87000 |
83821 |
92000 |
图2.13 结果选择属性ID和教师工资大于85000美元的工资。
关系代数
关系代数是定义关系的一组操作,并联通常的代数
合作如加法、减法和乘法,操作数。就像代数操作接受一个或多个号码作为输入,并返回一个数字作为输出,关系代数操作通常采用一个或两个关系作为输入并返回一个关系作为输出。关系代数是第六章详细介绍,但我们下面概述的一些操作。
标记(名字) |
用法示例 |
δ(选择) |
δ薪水>=85000(指导) 返回行输入的关系,满足谓词。 |
Π(项目) |
ΠID,salary(指导) 输出指定属性的所有行输入关系。删除重复元组的输出。 |
▷◁(自然连接) |
指导▷◁ 部分 |
X(笛卡尔积) U(集合) |
指导 X 部门 从两个输入输出所有双行关系(无论他们是否有相同的价值观在共同属性)∪名称(教练)∪名称(学生) 从两个输入输出元组的结合关系。 |
并不是所有的情况下,正如我们将看到的。有时,一个查询的结果包含重复的元组。例如,如果我们选择部门名称属性的教练关系,有几个重复的情况下,包括“Comp.Sci。”,出现了三次。某些关系这里所有语言的广告对他们严格雅典的数学定义一组安德烈副本。考虑到所需的相对大量的处理从大型结果删除重复的关系,保留副本。后者在这些情况下,关系不是纯粹的数学意义上的真正关系。当然,数据库中的数据必须改变。关系可以更新原来的元组,删除现有的元组,或修改元组
改变某些属性的值。整个关系可以删除和创建新的。我们将讨论使用SQL语言关系查询和更新章节3到5。
本文转载自《Database.System.Concepts》 P48~52的【2.6 Relational Operations】。