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


当前回答

自然连接是在所有公共列的基础上连接两个表。

Common列:在两个表中具有相同名称的列,并且在两个表中具有兼容的数据类型。 只能使用=运算符

内部连接是在on子句中提到的公共列的基础上连接两个表。

公共列:在两个表中都具有兼容数据类型的列,但不需要具有相同的名称。 您只能使用任何比较运算符,例如=,<=,>=,<,>,<>

其他回答

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

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)

自然连接是在所有公共列的基础上连接两个表。

Common列:在两个表中具有相同名称的列,并且在两个表中具有兼容的数据类型。 只能使用=运算符

内部连接是在on子句中提到的公共列的基础上连接两个表。

公共列:在两个表中都具有兼容数据类型的列,但不需要具有相同的名称。 您只能使用任何比较运算符,例如=,<=,>=,<,>,<>

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

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

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

内部连接是这样一种连接,即连接表中的匹配行对于返回的第一个表中的一行是必需的 外部连接是这样一种连接,即对于返回的第一个表中的一行,已连接表中的匹配行不需要 自然连接是一种连接(可以是自然左连接,也可以是自然右连接),它假设连接条件是两个表中同名列匹配的位置

我会避免像使用瘟疫一样使用自然连接,因为自然连接是:

not standard sql [SQL 92] and therefore not portable, not particularly readable (by most SQL coders) and possibly not supported by various tools/libraries not informative; you can't tell what columns are being joined on without referring to the schema your join conditions are invisibly vulnerable to schema changes - if there are multiple natural join columns and one such column is removed from a table, the query will still execute, but probably not correctly and this change in behaviour will be silent hardly worth the effort; you're only saving about 10 seconds of typing

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