PostgreSQL教程

PostgreSQL SELF JOIN

PostgreSQL自连接

在本节中,我们将了解 PostgreSQL自连接的工作原理,该功能用于关联同一行中的行。表。我们还学习了如何通过 PostgreSQL Self join子句从相似的表中获取层次数据。

什么是PostgreSQL自我联接?

在 PostgreSQL 中,我们有一种特殊的联接类型,称为自动加入。 " PostgreSQL自我连接用于完全设置相似表的不同名称,我们也可以使用别名。
要进行自我连接,我们将定义两次相似的表,但表别名不同,并在 ON 关键字后给出Join谓词。
实时地,我们使用自联接来比较行在同一表中(因为在PostgreSQL中不允许比较相似的表名),并获取分层数据。
注意: 没有诸如"自我连接"之类的关键字;但是,我们可以在别名的帮助下使用PostgreSQL INNER Join,左连接,右连接。

PostgreSQL自连接语法

在PostgreSQL中,我们有不同的自连接语法,如下所示:
语法1
在以下语法中,我们使用 INNER Join关键字,该关键字将表自身组合在一起:
SELECT column_list
FROM table_name Table1
INNER JOIN table_name Table2 ON join_predicate;
在以上语法中,表名与 PostgreSQL INNER JOIN的帮助相结合子句。
语法2
在以下语法中,我们使用左连接关键字,该关键字结合了表本身:
SELECT column_list
FROM table_name Table1
LEFT JOIN table_name Table2 ON join_predicate;
在上述语法中,表名在 PostgreSQL LEFT的帮助下结合在一起JOIN子句。
语法3
在以下语法中,我们使用 Right Join关键字,它结合了该表本身:
SELECT column_list
FROM table_name Table1
RIGHT JOIN Table_name Table2 ON join_predicate;
在上述语法中,表名在PostgreSQL RIGHT JOIN子句的帮助下结合在一起。

PostgreSQL自我连接的示例

让我们看一个示例来了解 PostgreSQL自连接的工作原理:

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

为此,我们将创建一个示例数据库,然后在CREATE命令的帮助下创建一个名为Customer的表,并使用INSERT命令插入一些值。
首先,我们将创建我们在PostgreSQL教程的前面部分中创建的一个示例数据库 ,或参考下面的链接了解如何在PostgreSQL中创建数据库:
现在,我们将按照以下过程在pgadmin4中创建数据库:
我们将在本地系统中然后在"对象"树中打开pgAdmin,然后右键单击数据库,然后选择 Create ,然后选择数据库。
数据库→创建→数据库
PostgreSQL自我加入 在那之后,创建数据库窗口将打开,我们需要提供一些必要的详细信息(数据库名称,注释)来创建数据库,然后单击保存按钮。 PostgreSQL自连接 组织数据库已成功创建,并显示在"对象"树中,如下面的屏幕快照所示: PostgreSQL自连接
成功创建原始数据库后,我们我们将在下面的语句中看到,将使用CREATE命令创建 Customer 表:
CREATE TABLE Customer (
Customer_id int PRIMARY KEY,
First_name VARCHAR NOT null,
Last_name VARCHAR NOT null,
Order_id INT,
FOREIGN KEY (Order_id) REFERENCES Customer (Customer_id) 
ON DELETE CASCADE
);
现在,我们将在INSERT的帮助下将一些客户记录插入 Customer 表中,如下面的语句所示:
INSERT INTO Customer(Customer_id,First_name, Last_name,
Order_id )VALUES
(1, 'Mia', 'Rodriguez', null),
(2, 'Maria', 'Garcia', 1),
(3, 'James ', 'Johnson', 1),
(4, 'Michael', 'Smith', 2),  
(5, 'David', 'Smith', 2), 
(6, 'Jones', 'Smith', 2),
(7, 'Margaret', 'Brown', 3),
(8, 'Jane', 'Miller', 3),
(9, 'Catherine', 'Martinez', 4),
(10, 'Ana', 'Clark', 4);
在将值创建并插入 Customer 表中之后,执行以下命令将得到以下输出:
Select * from Customer;
输出
PostgreSQL Self Join
在 <在strong> Customer 表中, Order_id 列引用了 Customer_id 列。 Order_id 列中的值显示了客户购买的订单。
如果客户在订单中的值为 Null ,则客户不购买任何商品。 Order_id 列。
在下图中可以看到,整个层次结构如下所示:
PostgreSQL Self Join
在以下示例中,我们将在 Customer 表中借助Self Join获取购买者的数据:
SELECT
c.First_name || ' ' || o.Last_name Customer,
o.first_name || ' ' || o.last_name Orders
FROM
Customer c
INNER JOIN Customer o ON o. order_id = c.order_id
ORDER BY Orders;
输出
执行上述命令后,我们将得到以下结果:
PostgreSQL Self Join
正如我们在上面的输出表中所看到的, Customer 表执行两次,一次作为客户,另一个作为订单。
在上面的命令中,我们为客户和 o <>使用表别名,例如 c ../strong>表示 Orders 。
,加入谓词借助相似的值识别 Customer/Orders 对在 Customer_id和Orders_id 列中。
注意: Order_id为Null的客户(Mia Rodriguez)不会出现在结果中。
我们将使用LEFT JOIN代替INNER JOIN子句,以使用以下命令在输出表中包括顶部的 Order :
SELECT
c.First_name || ' ' || o.Last_name Customer,
o.first_name || ' ' || o.last_name Orders
FROM
Customer c
LEFT JOIN Customer o ON o. order_id = c.order_id
ORDER BY Orders;
输出
执行上述命令后,我们将获得以下输出:
PostgreSQL Self Join
概述
在PostgreSQL Self Join部分中,我们学习了以下主题:
PostgreSQL自连接是特殊连接,在这里我们还可以在同一表中获取层次数据。 我们使用 PostgreSQL自连接子句在 INNER Join和左连接子句的帮助下将表本身组合在一起。
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4