自然连接的顺序是否重要?

8

如果我说:

A NATURALJOIN B

这是否与以下内容相同:

B NATURALJOIN A

同样地,如果我说:
A NATURALJOIN B NATURALJOIN C

这应该如何评估?

顺序不应该有影响。请参阅维基百科条目:https://en.wikipedia.org/wiki/Join_(SQL)#Natural_join - squiguy
1
顺序影响返回的列的顺序(如果您使用SELECT *而不是指定它们)。 - Thilo
@Thilo 对不起,我不明白,我对SQL完全是个新手。您能否给我展示一些带表格的示例? - Ogen
1个回答

14

以下是我的评论:

  1. NATURAL JOIN 是两个单词: NATURAL JOIN
  2. 表的顺序无关紧要。例外情况:当你使用 SELECT * 时,选择的列列表是第一个表的所有列,然后是第二个表的所有列。
  3. 不要使用 NATURAL JOIN,它通过它们共同的列连接表格。如果这些表格恰好共享像 "text"、"description" 或 "name" 这样的列名,那么它将被使用。想象一下,你编写了一个带有 SELECT 语句的程序,其中两个表 person 和 job 通过 person_id 进行连接。随后,你向这两个表添加了一个 "description" 列。突然间,你的程序将完全无法获取任何匹配记录,因为 "person_id" 可能匹配,但 "description" 不会。

谢谢你的回答。不幸的是,我必须学习自然连接,因为它是我正在上的课程的一部分。我理解我问题的第一部分,但第二部分怎么样呢?我该如何评估3个自然连接?我假设您将A和B进行自然连接,然后将其结果连接到C? - Ogen
是的,就像你所说的一样:SELECT ... FROM A NATURAL JOIN B NATURAL JOIN C。首先你连接A和B。然后用这个结果集连接C。但顺序并不重要,因为最终包含两个或多个表的所有列名都将被考虑。假设有A(a,x,y)和B(b,y,z)和C(c,x,z),最后你只会得到Ax=Cx和Ay=By和Bz=Cz的结果行,无论你使用什么顺序。例如:顺序为A,B,C-> 1.通过Ay=By连接A和B以获得AB。2.通过Cx=ABx和Cz=ABz将C与AB连接。嗯,希望我的解释方式不会太混乱。 - Thorsten Kettner
是的,我明白了,谢谢。但只是出于好奇,如果A和B没有任何共同属性,那么你将会用一个空集合与C进行自然连接?这样只会得到C吗? - Ogen
您需要对表进行交叉连接,即获取笛卡尔积,因为每个记录都“匹配”,没有任何标准可以反驳它。如果A中有五条记录,B中有三条记录,则会得到15条记录,然后再将其与C连接。 - Thorsten Kettner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接