MySQL Natural Join

17 Mar 2025 | 4 分钟阅读

当我们将两个或多个表中的行基于它们之间的公共列进行组合时,这个操作称为连接。自然连接是一种连接操作,它通过基于具有相同名称和数据类型的列来组合表,从而创建隐式连接。它类似于 INNERLEFT JOIN,但我们不能像在它们中那样使用 ON 或 USING 子句进行自然连接。

注意事项

  • 无需指定要连接的列名。
  • 结果表始终包含唯一的列。
  • 可以对两个以上的表执行自然连接。
  • 不要使用 ON 子句。

语法

以下是说明自然连接的基本语法

在此语法中,我们需要在 SELECT 关键字后指定要包含在结果集中的列名。如果我们想选择两个表中的所有列,将使用\*运算符。接下来,我们将在 FROM 关键字后指定要连接的表名,并在它们之间写入 NATURAL JOIN 子句。

自然连接示例

让我们通过示例了解自然连接在 MySQL 中是如何工作的。首先,我们将使用以下语句创建两个名为 customerbalance 的表

接下来,我们将使用以下语句向这两个表中填充一些记录

接下来,我们将执行 SELECT 语句来验证表数据

MySQL Natural Join

现在,我们将看到满足自然连接条件的条件。我们可以通过检查表结构来做到这一点,使用 DESCRIBE 语句。请看下图

MySQL Natural Join

在此图中,我们可以看到列名 id 和 account 及其数据类型是相同的,这满足了自然连接的标准。因此,我们可以对它们使用自然连接。

执行以下语句以使用自然连接连接表

我们将得到以下结果

MySQL Natural Join

我们可以使用带有 ON 子句的 INNER JOIN 来完成相同的工作。以下是解释此连接的查询

成功执行后,我们将获得与自然连接相同的结果

MySQL Natural Join

现在,我们将使用 (*) 代替列名,如下所示

假设我们使用星号 (*) 代替列名,那么自然连接会自动搜索相同的列名和数据类型并将其内部连接。此外,它不会在输出中显示重复的列。因此,执行上述语句后,我们应该会看到以下输出

MySQL Natural Join

带 WHERE 子句的自然连接

WHERE 子句用于从表中返回过滤结果。以下示例使用自然连接子句说明了这一点

我们将获得以下结果,其中显示了账户余额大于 50000 的客户信息。

MySQL Natural Join

使用三个表的自然连接

我们知道自然连接还可以对两个以上的表执行连接操作。为了理解这一点,我们将使用以下语法

让我们使用以下语句创建另一个名为 cust_info 的表

然后,我们将向此表中填充记录

我们可以使用 SELECT 语句验证数据。请看下图

MySQL Natural Join

要使用自然连接连接三个表,我们需要执行以下语句

它将给出以下结果。在这里,我们可以看到 account number 出现在所有三个表中,但在输出中只出现一次,这符合自然连接的标准。

MySQL Natural Join

自然连接与内连接的区别

序号自然连接Inner Join
1.它基于相同的列名及其数据类型连接表。它基于 ON 子句中显式指定的列名连接表。
2.它在结果集中始终返回唯一的列。它返回两个表的所有属性,以及与 ON 子句条件匹配的重复列。
3.如果我们在此连接中没有指定任何条件,它将根据公共列返回记录。它仅返回两个表中都存在的行。
4.自然连接的语法如下
SELECT [column_names | *]
FROM table_name1
NATURAL JOIN table_name2;
内连接的语法如下
SELECT [column_names | *]
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name = table_name2.column_name;