PostgreSQL JOIN

2025年3月17日 | 阅读 7 分钟

在本节中,我们将简要了解各种类型的 PostgreSQL 连接的运作方式,例如内连接、左连接、右连接和全外连接

PostgreSQL JOINs 与 SELECT 命令一起使用,帮助我们从各种表中检索数据。我们可以将 Select 和 Joins 语句合并到一个命令中。每当我们想从两个或更多表中获取记录时,我们都会执行连接命令。

它用于根据连接表之间标准列的数据,合并一个或多个表中的列。通常,第一个表标准列主键列,而第二个表的列是外键列

PostgreSQL 中,我们有各种类型的连接,如下所示

下图显示了本 PostgreSQL 教程部分将解释的最常用的 PostgreSQL 连接。

PostgreSQL JOIN

PostgreSQL 连接示例

让我们看一些不同类型的 PostgreSQL 连接的示例

在这里,我们将创建并插入两个不同的表,在这些表中我们将对几种类型的连接执行操作

在下面的示例中,我们将使用 Create 命令创建一个 Luxury_cars 表。

输出

执行上述命令后,我们将收到以下消息,显示 Luxury_cars 表已成功创建。

PostgreSQL JOIN

在这里,我们将再次使用 Create 命令创建一个 Sports_cars 表,如下所示

输出

执行上述命令后,我们将收到以下消息,显示 Sports_cars 表已成功创建。

PostgreSQL JOIN

之后,我们将使用 INSERT 命令在 Luxury_cars 表中插入一些值

输出

执行上述命令后,我们将收到以下消息,表示值已成功插入到 Luxury_cars 表中。

PostgreSQL JOIN

就像我们插入 Luxury_cars 表中的值一样,我们也将借助 Insert 命令将值插入到 Sports_cars 表中

输出

执行上述命令后,我们将收到以下消息,表示值已成功插入到 Sports_cars 表中。

PostgreSQL JOIN

上述表有一些相似的汽车,例如 Chevrolet CorvetteMercedes Benz SL Class

现在我们将使用 SELECT 命令从 Luxury_cars 表中获取以下数据

输出

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

PostgreSQL JOIN

我们将使用 SELECT 命令从 Sports_cars 表中获取以下数据

输出

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

PostgreSQL JOIN

现在,让我们实时查看不同类型的 PostgreSQL Join 的工作原理

PostgreSQL 内连接

PostgreSQL INNER JOIN 用于返回各种表中满足连接条件的所有行。

PostgreSQL 内连接的语法

下面的可视化表示显示了 PostgreSQL 内连接的工作原理

PostgreSQL JOIN

例如

我们将以上表(Luxury_cars 和 Sports_cars)为例来理解 PostgreSQL 内连接。

以下命令将通过匹配 luxury_car_namesports_car_name 列中的值来连接第一个表 (Luxury_cars) 和第二个表 (Sports_cars)

输出

一旦我们执行了上述命令,我们将得到以下结果,其中我们可以看到来自 Luxury_carsSports_cars 表的匹配行数据。

PostgreSQL JOIN
  • 内连接用于分析 表 A (Luxury_cars) 中的每一行。
  • 它将 luxury_car_name 列中的记录与 表 B (Sports_cars) 中每一行的 sports_car_name 列中的记录进行比较。
  • 如果这些记录相似,则内连接会创建一个包含两个表中的列的新行,并将该行增强到输出中。

PostgreSQL 左连接

PostgreSQL LEFT JOIN 用于返回左表(可在 ON 条件中定义)中的所有行,以及仅当连接条件满足时,从另一个表中返回的行。

PostgreSQL 左连接的语法

下面的可视化表示显示了 PostgreSQL 左连接的工作原理

PostgreSQL JOIN

例如

在下面的命令中,我们将使用左连接条件连接 Luxury_cars 表和 Sports_cars 表。

在左连接子句中,表 A 或第一个表称为左表表 B 或第二个表称为右表

输出

一旦我们执行了上述命令,我们将得到以下结果。

PostgreSQL JOIN

PostgreSQL 左连接的工作原理

  • 在上面的截图中,左连接条件从左表 (Luxury_cars) 中选择记录,并将其 luxury_car_names 列中的值与 Sports_cars 表的 sports_car_names 列中的值进行比较。
  • 如果这些记录相似,则左连接会创建一个新行,其中包含两个表中的列,并将该特定行添加到结果中,如我们在上面的输出中看到的 Row1 和 Row2
  • 假设,如果值不相似,则左连接也会生成一个新行,其中包含两个表中的列并将其添加到结果中。
  • 但是,它会将右表 (Sports_cars) 的列填充为 null,如我们在输出中看到的 Row3、Row4 和 Row5

带 Where 子句的 PostgreSQL 左连接

我们还可以将左连接与 WHERE 条件一起使用。在下面的示例中,我们将从左表 (Luxury_cars) 中选择不包含右表 (Sports_cars) 中相似行的行

输出

一旦我们执行了上述命令,我们将得到以下输出,显示 S_IDNULL 的记录。

PostgreSQL JOIN

注意:我们可以等效地使用 LEFT JOIN 和 LEFT OUTER JOIN,因为左连接和左外连接的工作方式相似。

下面的可视化表示解释了左连接,它从左表返回不包含右表中相似行的行

PostgreSQL JOIN

PostgreSQL RIGHT JOIN

PostgreSQL RIGHT JOIN 用于返回右表中定义在 ON 条件中的所有行,以及仅在连接条件满足时,从另一个表中返回的行。

RIGHT JOIN 将从右表获取数据,因为它与 LEFT JOIN 相反。

PostgreSQL 右连接的语法

下面的维恩图显示了 PostgreSQL 右连接的工作原理

PostgreSQL JOIN

例如

以下命令用于表示右连接的工作原理,其中我们将 Luxury_cars 表与 Sports_cars 表连接

输出

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

PostgreSQL JOIN

PostgreSQL 右连接的工作原理

  • 在上面的图像中,RIGHT JOINSports_cars 表中每一行的 Sports_car_names 列中的每个值与 Luxury_cars 表中所有行的 luxury_cars_name 列中的每个值进行比较。
  • 如果这些值相似,则右连接会生成一个新行,其中包含两个表(Luxury_cars 和 Sports_cars)中的列。
  • 假设,如果值不相似,则右连接也会生成一个新行,其中包含两个表中的列并将其添加到输出中。

带 Where 子句的 PostgreSQL 右连接

同样,我们也可以将右连接与 WHERE 条件一起使用。例如,我们将使用 where 子句从右表 (Sports_cars) 中选择不包含左表 (Luxury_cars) 中相似行的行

输出

执行上述命令后,我们将得到以下输出,显示 L_IDNULL 的记录。

PostgreSQL JOIN

注意:我们可以等效地使用 RIGHT JOIN 和 RIGHT OUTER JOIN,因为右连接和右外连接的工作方式彼此相似。

下面的可视化表示解释了右连接,它从右表返回不包含左表中相似行的行

PostgreSQL JOIN

PostgreSQL 全外连接

FULL OUTER JOIN 用于在左表右表记录中存在匹配时返回所有记录。

PostgreSQL 全外连接的语法

下面的维恩图显示了 PostgreSQL 全外连接的工作原理

PostgreSQL JOIN

例如

以下命令用于表示全外连接的工作原理,以连接 Luxury_cars 表和 Sports_cars 表。

输出

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

PostgreSQL JOIN

使用 where 子句的 PostgreSQL 全外连接

下面的维恩图显示了全外连接,它从一个表中返回不包含另一个表中匹配行的行

PostgreSQL JOIN

要返回一个表中没有另一个表中匹配行的行,我们将使用带 WHERE 子句的全外连接,如下所示

输出

一旦我们执行了上述命令,我们将得到以下结果

PostgreSQL JOIN

概述

在本节中,我们学习了多种 PostgreSQL 连接的工作原理,它们将来自各种连接表的数据合并。