PostgreSQL Left Join

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

在本节中,我们将了解ostgreSQL 左连接的工作原理,它用于从左表中返回数据。我们还将学习如何使用表别名、WHERE 子句、USING 子句以及使用 PostgreSQL 左连接子句连接多个表

什么是 PostgreSQL 左外连接或左连接子句?

PostgreSQL LEFT JOIN左外连接用于从左表返回所有行以及来自其他表的行,如果 ON 条件中定义的连接条件得到满足。并且,如果未从右表找到相应的记录,它将返回null

左连接也可以称为左外连接子句。因此,Outer 是在左连接中使用的可选关键字。在 PostgreSQL 中,左连接内连接条件并行。

以下维恩图显示了 PostgreSQL 左连接,我们可以轻松理解左连接从左表返回所有数据以及来自右表的相似数据:

PostgreSQL Left Join

PostgreSQL 左连接语法

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

在以上语法中,table1 指的是左表,而 table2 指的是右表,这意味着特定条件将从 table1 返回所有记录,并根据定义的连接条件从 table2 返回匹配的记录。

我们将按照以下步骤使用 Left 或 Left Outer Join 条件连接左表和右表

  • 首先,我们将定义两个表中的列列表,我们希望在 SELECT 条件中选择数据。
  • 然后,我们将定义左表,即 FROM 子句中的 table 1
  • 最后,我们将描述右表,即 Left JOIN 条件中的 table 2,并在 ON 关键字之后编写连接条件。

PostgreSQL 左连接示例

让我们看一个例子来了解 PostgreSQL 左连接的工作原理

使用 PostgreSQL 左连接连接两个表

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

首先,我们将使用 CREATE 命令创建 Client 和 Orders

以下命令用于创建 Orders

在执行上述命令后,已成功创建 Client 和 Orders 表。

一旦生成了两个表,我们就准备好使用 INSERT 命令插入一些值,如下所示

在下面的命令中,我们在 Orders 表中插入值

在创建并向 Client 和 Orders 表中插入值后,我们将通过执行以下命令获得以下输出

表 1:Client

输出

PostgreSQL Left Join

表 2:Orders

输出

在执行上述命令后,我们将从 Orders 表中获取数据

PostgreSQL Left Join

以下查询用于从两个表(ClientOrders)中选择记录

或者,我们在上述查询中用 Left Outer Join 关键字 替换 Left Join 关键字,因为两者都会给出类似的输出

输出

一旦我们实现了上述命令,我们将获得以下结果

PostgreSQL Left Join

注意:当 Client 表中的某一行在 Orders 表中没有匹配的行时,不匹配行的 order_date 和 price 列的值将为 NULL。

PostgreSQL 左连接的工作原理

  • 在上面的屏幕截图中,左连接条件从左表 (Client) 中选择记录,它将 client_id、client_name 列中的值与 Orders 表中 order_date、price 列中的值进行比较。
  • 如果这些记录相似,则 Left join 将创建一个新行,该行具有在 Select 子句中显示的列,并将特定行添加到结果中。
  • 假设,如果这些值不相似,那么左连接也会生成一个新行,该行显示在 SELECT 命令中,并且它用 NULL 填充来自右表 (Orders) 的列。

使用 PostgreSQL 左连接进行表别名

我们将使用表别名为已连接的表分配短名称,以使命令更易于理解。

通常,我们要连接的表将具有名称相似的列,例如 Client_id 列。在下面的命令中,我们将使用表别名,它会返回与上面类似的结果

输出

一旦我们实现了上述命令,我们将得到以下输出

PostgreSQL Left Join

使用 USING 子句的 PostgreSQL 左连接

在本例中,我们将看到 PostgreSQL 左连接如何与 USING 子句一起使用。

这两个表 (Client 和 Orders) 都包含相似的列名 Client_id;这就是我们可以使用 USING 子句从表中获取值的原因。

在下面的示例中,我们在 Left join 中使用 USING 子句,它将返回值 Client_id、Client_name、Client_prof、price 和 order_date,因为两个表具有相似的 Client_id 列。

输出

执行上述语句后,我们将获得以下结果

PostgreSQL Left Join

使用 WHERE 子句的 PostgreSQL 左连接

在这里,WHERE 子句允许我们返回过滤结果。并且我们也可以将 WHERE 条件与 Left join 一起使用。

在下面的示例中,我们将从两个表 ClientOrders 中选择行,其中 client_qualification 等于 MBA:

输出

成功执行上述命令后,它将给出以下输出

PostgreSQL Left Join

PostgreSQL LEFT JOIN 中 WHERE 和 ON 子句之间的区别

我们可以看到以下命令以了解 PostgreSQL 左连接中 WHERE 和 ON 子句之间的区别。

在左连接中,WHERE 和 ON 子句给我们不同的输出。

首先,我们使用带有左连接的 WHERE 子句,正如我们可以在下面的命令中看到的那样

输出

一旦我们实现了上述查询,我们将获得以下输出

PostgreSQL Left Join

现在,我们使用带有左连接的 ON 子句,正如我们可以在下面的命令中看到的那样

输出

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

PostgreSQL Left Join

注意:在 PostgreSQL 中,如果我们使用命令中的 WHERE 和 ON 子句,则内连接将始终返回类似的输出。

使用 PostgreSQL LEFT JOIN 连接多个表

在上一节中,我们已经创建了两个表,即 ClientOrders。现在,我们使用 Left join 来组合不同的表并从特定表中获取记录。

因此,我们将使用 CREATE 命令创建另一个表作为 Clieint_ details,正如我们可以在以下命令中看到的那样

成功创建 Clieint_ details 表后,我们将使用 INSERT 命令向其中插入一些值,正如我们可以在以下命令中看到的那样

创建并插入 Client_details 表中的值之后,我们将通过执行以下命令获得以下输出

表 3:Client_details

PostgreSQL Left Join

现在,我们将使用 PostgreSQL Left Join 连接多个表,例如 Client、Orders 和 Client_details,正如我们可以在以下语句中看到的那样

输出

成功执行上述命令后,我们将给出以下结果

PostgreSQL Left Join

使用 PostgreSQL LEFT JOIN 子句获取不匹配的记录

如果我们想从表中获取数据,该表不包含来自另一个表的任何相似数据行,因此在这种情况下,我们将使用 PostgreSQL LEFT JOIN 子句。

正如我们在下面的示例中看到的那样,LEFT JOIN 子句用于标识没有 Mobile_numberclient

输出

一旦我们实现了上述命令,我们将获得以下结果

PostgreSQL Left Join
下一个主题PostgreSQL 右连接