PostgreSQL Natural Join

17 Mar 2025 | 4 分钟阅读

在本节中,我们将了解 PostgreSQL Natural join 的工作原理,它用于连接两个或多个表。

什么是 PostgreSQL Natural Join 子句?

natural join 用于组合多个表,作为输出,我们将获得新的行,这些行旨在连接每个表的列。 它也用于组合表,从而创建隐式连接,具体取决于组合表中相似的列名。

换句话说,我们可以说 PostgreSQL Natural Join 子句本质上是为一个行集创建一个临时表,以便在多个(两个或多个)表上工作。

这些表将在连接条件中指定,并且至少有一个共同列,并且这些标准列之间应该存在关系。

默认情况下,PostgreSQL 将使用 INNER JOIN 操作。 它可与 LEFT JOININNER JOINRIGHT JOIN 一起使用,但连接类型必须在连接中定义,否则 PostgreSQL 将默认使用 INNER JOIN 操作。

PostgreSQL Natural Join 的语法

Natural Join 关键字与 SELECT 命令一起使用,必须写在 FROM 关键字之后。

注意:在上面的语法中,我们还可以使用星号 (*) 代替 Column-list,因为星号将生成包含以下字段的输出

  • 当两个表都有一个唯一列,其中包含不同的名称时。
  • 当一个表具有一个公共字段并且两个列都具有相同的名称时。

PostgreSQL Natural join 示例

让我们看一个例子来了解 PostgreSQL Natural join 的工作原理

使用 PostgreSQL Natural Join 连接两个表

为此,我们将使用 CREATE 命令创建两个名为 Course_categories 和 Course 的表,并使用 INSERT 命令插入一些值。

首先,我们将使用 CREATE 命令创建 Course_categories 和 Course

以下语句用于创建 Course_categories

以下命令用于创建 Course

执行上述命令后,已成功创建 Course_categories 和 Course 表。

在上面的表中,所有 Course categories 都有零个或多个 courses,但这里所有课程都链接到唯一的 Course categories

Course_catagories 表中,Cousre_id 列是外键,它被称为 Course 表的主键

我们将使用 PostgreSQL Natural Join,因为 Course_id 是两个表中的标准列。

生成两个表后,我们就可以使用 INSERT 命令将一些值插入到其中,如下所示

在下面的命令中,我们将值插入到 Course_catagories 表中

在下面的命令中,我们将值插入到 Course 表中

在创建并将值插入到 Course_categories 和 Course 表中后,我们将使用 SELECT 命令查看特定表上的现有记录

表 1:Course_categories

输出

在实现上述命令后,我们将从 Course_categories 表中获得以下数据

PostgreSQL Natural Join

表 2:Course

输出

执行上述命令后,我们将从 Course 表中获得以下记录

PostgreSQL Natural Join

以下查询使用 PostgreSQL Natural Join 子句来合并来自 Course 和 Course_categories 表的记录。

输出

执行上述命令后,我们将得到以下结果:

PostgreSQL Natural Join

上面的命令类似于下面的命令,其中我们使用 INNER JOIN 子句而不是 Natural Join Keyword

输出

执行上述命令后,我们将获得以下命令

PostgreSQL Natural Join

PostgreSQL Natural Join 中,似乎没有必要描述 Join 子句,因为它使用依赖于 Common 列的隐式连接条件。

但是我们应该避免在可能的情况下使用 Natural Join,因为有时它可能会导致无法预测的结果。

让我们看一个示例,如果我们在两个表中都有两个标准列。 因此,为此我们将采用 employee 和 department

employee 表的结构

我们将使用 Select 命令查看 employee 表的结构,如下所示

输出

在实现上述语句后,我们将获得以下结果

PostgreSQL Natural Join

department 表的结构

我们将使用 Select 命令查看 department 表的结构,如下所示

输出

在实现上述语句后,我们将获得以下结果

PostgreSQL Natural Join

正如我们在上面的屏幕截图中观察到的,employee 和 department 表具有相同的 emp_id 列,因此我们可以使用 Natural Join 子句 在以下命令中组合这些表

输出

执行上述命令后,我们将获得以下输出

PostgreSQL Natural Join

在上面的输出中,我们将获得空表,因为两个表还有另一个名为 emp_fname 的公共列,该列不能用于 PostgreSQL Natural Join。 但是 Natural Join 条件仅使用 emp_fname 列。

概述

在 PostgreSQL Natural Join 部分,我们学习了以下主题

  • PostgreSQL Natural Join 部分,我们学习了以下主题

下一个主题PostgreSQL 触发器