【发布时间】:2016-10-03 21:08:17
【问题描述】:
表 1
Customer id city
John 1 LA
Nancy 2 NULL
表 2
Customer $ in the pocket
John 20
Nancy 30
我想知道如果Table 1 自然加入 与Table 2 会发生什么?我的猜测是结果将是 4 个属性,并且 John 和 Nancy 都会出现。
但我的朋友告诉我只有 John 会出现,Nancy 不会出现,因为有一个 null 值。
【问题讨论】:
-
加入发生在两个属性上,如果你使用客户加入(这将是默认的)那么你的朋友就错了:)
-
要弄清楚,只需将 NATURAL JOIN 重写为常规 INNER EQUIJOIN,使用与 NATURAL JOIN 相同的规则。鉴于您示例中的关系,这将是
Customer属性上的等值连接。 (city 属性中的 NULL 值无关紧要,因为其他关系没有名为city的属性。) NATURAL JOIN 将使用具有相同名称的所有属性。如果第二个关系也有一个名为city的属性,那将与Customer和city属性上的 INNER EQUIJOIN 相同。 -
对于自然加入,我们是否只有在我们匹配了共同属性时才加入,(在这种情况下,是客户字段)?
-
@spencer7593,所以如果common属性中不包含
null,那么就可以了? -
我不会说“自然加入”就可以了。在学术界之外,我们从不使用 NATURAL JOIN。 (我们只需要有人在 table2 中添加一个名为
city的列,而我们正在运行的查询会被破坏。)当我遇到一个 NATURAL JOIN 时,为了弄清楚它到底在做什么,我需要看看遍历两个表中的所有列,并找到所有匹配项。当我这样做的时候,我悄悄地诅咒那个一直在拯救自己的开发者,输入“NATURAL”而不是“ON a.customer = b.customer”,这样我就可以多花二十倍的时间来弄清楚。
标签: relational-database relational-algebra natural-join