自然连接和内部连接之间的区别是什么?


当前回答

内连接和自然连接基本相同,但有细微的区别。不同的是,在自然连接中不需要指定条件,但在内部连接中条件是必须的。如果我们在内连接中指定条件,则生成的表就像笛卡尔积。

其他回答

自然连接只是一种避免输入的快捷方式,假设连接是简单的,并且匹配相同名称的字段。

SELECT
  *
FROM
  table1
NATURAL JOIN
  table2
    -- implicitly uses `room_number` to join

和……一样。

SELECT
  *
FROM
  table1
INNER JOIN
  table2
    ON table1.room_number = table2.room_number

然而,你不能用快捷格式做的是更复杂的连接…

SELECT
  *
FROM
  table1
INNER JOIN
  table2
    ON (table1.room_number = table2.room_number)
    OR (table1.room_number IS NULL AND table2.room_number IS NULL)

不同的是,内部(equi/default)连接和自然连接,自然连接公共列中的win将在单次显示,但内部/equi/default/简单连接公共列将显示两次。

自然连接:SQL Join子句组合关系数据库中2个或多个表的字段。自然连接基于两个表中具有相同名称的所有列,以及两个表中所有匹配列中具有相等值的选定行。

—两个列的名称和数据类型必须相同。

使用子句:在自然连接中,如果表具有相同名称但数据类型不同的列,则连接会导致错误。为了避免这种情况,可以使用USING子句修改join子句。USING子句指定应用于连接的列。

NATURAL连接只是特定INNER连接(或“等价连接”)的简短语法,一旦语法被解开,两者都表示相同的关系代数操作。它不是一种“不同类型”的连接,就像OUTER(左/右)或CROSS连接一样。

参见维基百科上的equal -join部分:

自然连接提供了等价连接的进一步专门化。通过比较两个表中在连接表中具有相同列名的所有列,隐式地产生连接谓词。对于每对名称相同的列,生成的连接表只包含一列。 大多数专家都认为天然接头是危险的,因此强烈反对使用。危险来自于无意中添加了一个与另一个列同名的新列……

也就是说,所有的NATURAL连接都可以写成INNER连接(反之则不然)。为此,只需显式地创建谓词——例如USING或ON——并且,如Jonathan Leffler所指出的,选择所需的结果集列以避免“重复”。

快乐的编码。


(NATURAL关键字也可以应用于LEFT和RIGHT连接,同样适用。自然左/右连接只是特定左/右连接的简短语法。)

自然连接:它是两个表中所有列的组合或组合结果。 它将返回第一个表相对于第二个表的所有行。

内部连接:这种连接将工作,除非任何列名将在两个表中same