PostgreSQL Self Join

17 Mar 2025 | 4 分钟阅读

在本节中,我们将了解 PostgreSQL 自连接的工作原理,它用于关联同一表中的行。我们还学习了如何借助 PostgreSQL 自连接子句从相似的表中获取分层数据

什么是 PostgreSQL 自连接?

PostgreSQL 中,我们有一种特殊的连接类型,称为 自连接"PostgreSQL 自连接用于完全设置相似表的不同名称,我们也可以使用别名。

要执行自连接,我们将使用不同的表别名定义相似表两次,并在 ON 关键字后给出连接谓词。

在实际应用中,我们使用自连接来比较同一表中的行 (因为 PostgreSQL 中不允许比较相似的表名),并获取分层数据。

注意:没有自连接这样的关键字;但是,我们可以借助别名使用 PostgreSQL 内连接、左连接、右连接。

PostgreSQL 自连接语法

在 PostgreSQL 中,我们有不同的自连接语法,如下所示

语法 1

在下面的语法中,我们使用一个 内连接关键字, 它将表与自身组合起来

在上面的语法中,table_name 借助 PostgreSQL INNER JOIN 子句组合在一起。

语法 2

在下面的语法中,我们使用 左连接关键字,它将表与自身组合起来

在上面的语法中,table_name 借助 PostgreSQL LEFT JOIN 子句与自身组合在一起。

Syntax3

在下面的语法中,我们使用 右连接关键字,它将表与自身组合起来

在上面的语法中,table_name 借助 PostgreSQL RIGHT JOIN 子句与自身组合在一起。

PostgreSQL 自连接示例

让我们看一个示例,了解 PostgreSQL 自连接是如何工作的

从表中获取分层记录的示例

为此,我们将创建一个示例数据库,然后借助 CREATE 命令创建一个名为 Customer 的表,并使用 INSERT 命令插入一些值。

首先,我们将创建 一个示例数据库,就像我们在 PostgreSQL 教程的早期部分中创建的那样,或者参考下面的链接来了解如何在 PostgreSQL 中创建一个数据库

postgresql-create-database

现在,我们将按照以下步骤在 pgadmin4 中创建一个数据库

  • 我们将在本地系统中打开 pgAdmin,然后在对象树中,右键单击 数据库,选择 创建,然后选择 数据库

数据库 → 创建 → 数据库

PostgreSQL Self Join
  • 之后,将打开 创建数据库 窗口,我们需要提供一些必要的详细信息 (数据库名称、注释) 以创建数据库,然后单击 保存 按钮。
PostgreSQL Self Join
  • Organization 数据库已成功创建,并显示在对象树中,我们可以在下面的屏幕截图中看到
PostgreSQL Self Join

成功创建 Origination database 后,我们将使用 CREATE 命令创建 Customer 表,我们可以在下面的语句中看到

现在,我们将借助 INSERT 将一些客户记录插入到 Customer 表中,我们可以在下面的语句中看到

Customer 表中创建并插入值后,在执行以下命令时,我们将获得以下输出

输出

PostgreSQL Self Join

Customer 表中,Order_id 列引用 Customer_id 列。Order_id 列中的值显示客户购买的订单。

如果 Order_id 列中的值为 Null,则客户未购买任何东西。

正如我们在下图中看到的那样,整体层次结构如下所示

PostgreSQL Self Join

在下面的示例中,我们将获取谁在 Customer 表中使用自连接购买的数据

输出

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

PostgreSQL Self Join

正如我们在上面的输出表中观察到的那样,Customer 表执行了两次,一次作为 Customer,另一次作为 Orders

在上面的命令中,我们使用 表别名,例如 c 用于 customero 用于 Orders

并且 连接谓词 借助 Customer_id 和 Orders_id 列中的相似值来标识 Customer/Orders 对。

注意:Order_id 为 Null 的客户 (Mia Rodriguez) 不会出现在结果中。

我们将使用 LEFT JOIN 代替 INNER JOIN 子句,以便使用以下命令在输出表中包含顶级 Order

输出

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

PostgreSQL Self Join

概述

在 PostgreSQL 自连接部分,我们学习了以下主题

  • PostgreSQL 自连接是一种特殊的连接,我们还可以在同一表中获取 分层数据
  • 我们使用 PostgreSQL 自连接子句借助 内连接和左连接子句将表本身组合在一起。