概述
3.3.3 自然连接
● 在我们的查询示例中,需要从 instructor 和 teaches 表中组合信息,匹配条件是需要 instructor . ID 等于 teaches . ID 。这是在两个关系中具有相同名称的所有属性。实际上这是一种通用的情况,也就是说, from 子句中的匹配条件在最通常的情况下需要在所有匹配名称的属性上相等。
● 为了在这种通用情况下简化 SQL 编程者的工作, SQL 支持一种被称作自然连接的运算,下面我们就来讨论这种运算。
● 事实上 SQL 还支持几种另外的方式使得来自两个或多个关系的信息可以被连接( join )起来。我们已经见过怎样利用笛卡儿积和 where 子句谓词来连接来自多个关系的信息。
● 自然连接( natural join )运算作用于两个关系,并产生一个关系作为结果。不同于两个关系上的笛卡儿积,它将第一个关系的每个元组与第二个关系的所有元组都进行连接;自然连接只考虑那些在两个关系模式中都出现的属性上取值相同的元组对。因此,回到 instructor 和 teaches 关系的例子上, instructor 和 teaches 的自然连接计算中只考虑这样的元组对:来自instructor的元组 和 teaches的元组在共同属性ID上的取值相同;
● 结果关系如图3-8所示,只有13个元组,它们给出了关于每个教师以及该教师实际讲授的课程的信息。注意我们并没有重复列出那些在两个关系模式中都出现的属性,这样的属性只出现一次。还要注意列出属性的顺序:先是两个关系模式中的共同属性,然后是那些只出现在第一个关系模式中的属性,最后是那些只出现在第二个关系模式中的属性。
● 考虑查询“对于大学中所有讲授课程的教师,找出他们的姓名以及所讲述的所有课程标识”,此前我们曾把该查询写为:
select name, course id
from instructor, teaches
where instructor.ID= teaches.ID;
该查询可以用SQL的自然连接运算更简洁的写作:(这两个查询的结果一致)
select name, course id
from instructor natural join teaches;
● 正如我们此前所见,自然连接运算的结果是关系。
● 从概念上讲, from 子句中的“ instructor natural join teaches ”表达式可以替换成执行该自然连接后所得到的关系。然后在这个关系上执行 where 和 select 子句。
●在一个 SQL 査询的 from 子句中,可以用自然连接将多个关系结合在一起,如下所示:
select A1, A2, . . . , An
from r1 natural join r2 natural join . . . natural join rm
where P;
更为一般地, from 子句可以为如下形式:
from E1, E2, . . . , En
<
最后
以上就是务实发带为你收集整理的数据库系统概念-第六版 - charter 3 - 笔记 3的全部内容,希望文章能够帮你解决数据库系统概念-第六版 - charter 3 - 笔记 3所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复