PostgreSQL 左连接


PostgreSQL 左连接

在本节中,我们将了解ostgreSQL Left join的工作原理,它用于从左表返回数据。我们还学习了如何使用table-aliasing, WHERE clause, USING clause, and join multiple tables,以及在 PostgreSQL Left join 子句的帮助下连接多个表。

什么是 PostgreSQL Left OuterJoin 或 Left Join 子句?

PostgreSQL的LEFT JOINLEFT OUTER JOIN用于左表和行从其他表中返回所有行条件ON状态达到规定的加入。如果从右表中没有找到相应的记录,它将返回null

左连接也可以被称为左外连接子句。因此,Outer是可选关键字,用于Left Join。在PostgreSQL 中,Left joinInner Join条件平行。

下面的维恩图显示了 PostgreSQL左连接,我们可以很容易地理解左连接返回左表中的所有数据和右表中的相似数据

PostgreSQL 左连接

PostgreSQL 左连接语法

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

SELECT columns    
FROM table1    
LEFT [OUTER] JOIN table2    
ON table1.column = table2.column;

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

我们将按照以下步骤在左或左外连接条件的帮助下连接左表和右表

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

PostgreSQL 左连接示例

让我们看一个例子来理解PostgreSQL 左连接是如何工作的:

使用 PostgreSQL Left Join 连接两个表

为此,我们将在 CREATE 命令的帮助下创建两个名为Client\Orders\表的表,并使用INSERT commandM插入一些值。

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

CREATE TABLE Client(  
client_id int primary key,   
client_name varchar not null,   
client_profession varchar not null,   
client_qualification varchar not null,  
client_salary int );

以下命令用于创建Orders\表:

Create table Orders  
(client_id int primary key,  
order_id int not null,  
price int,  
order_date Date Not null);

客户端和Orders\表已执行上述命令后,已成功创建。

一旦生成了两个表,我们就可以使用INSERT命令向其中插入一些值,如下所示:

INSERT INTO Client (client_id, client_name,   
client_profession, client_qualification, client_salary)  
VALUES  
(1, 'Emma Hernandez','Web Designer','BTech', 25000),  
(2, 'Mia Clark','Software Engineer','BE',20000),  
(3, 'Noah Rodriguez','Bussinessman','MBA',50000),  
(4, 'Martha Brown','Doctor','MBBS',75000),  
(5,'James Luther','HR','MBA',35000),  
(6,'Maria Garcia','Astronaut','Msc', 100000),  
(7,'Robert Smith','Software Tester','BTech',30000);

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

INSERT INTO Orders (client_id, order_id, price, order_date)  
VALUES  
(1, 101, 2000,'2020-05-14'),  
(2, 102, 3500,'2019-08-30'),  
(3, 103, 4000,'2020-06-23'),  
(4, 104, 2500,'2017-12-11'),  
(5, 105, 5000,'2018-10-26');

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

表 1:客户端

Select * from Client;

输出

PostgreSQL 左连接

表2:订单

Select * from Orders;

输出

执行上述命令后,我们会从Orders\表中获取数据:

PostgreSQL 左连接

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

SELECT Client.client_id, client_name, order_date, price   
FROM Client    
LEFT JOIN Orders   
ON Client.client_id = Orders.client_id;

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

SELECT Client.client_id, client_name, order_date, price   
FROM Client    
LEFT Outer JOIN Orders   
ON Client.client_id = Orders.client_id;

输出

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

PostgreSQL 左连接

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

PostgreSQL 左连接的工作

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

使用 PostgreSQL 左连接进行表别名

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

大多数情况下,我们要加入的表将具有与Client_id列名称相似列。在下面的命令中,我们将使用表别名,它返回与上面类似的结果:

SELECT c.Client_id, Client_name,order_date, price  
FROM Client c   
LEFT JOIN Orders o   
ON c.client_id= o.client_id;

输出

一旦我们执行了上面的命令,我们将得到以下输出:

PostgreSQL 左连接

PostgreSQL 左连接与 USING 子句

在这里,我们将看到 PostgreSQL Left join 如何与USING子句一起工作。

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

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

SELECT Client_id, Client_name, Client_profession, order_date, price  
FROM Client    
LEFT JOIN Orders     
USING (client_id);

输出

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

PostgreSQL 左连接

使用 WHERE 子句的 PostgreSQL 左连接

在这里,WHERE子句允许我们返回过滤器结果。我们还可以将 WHERE 条件与Left join 结合使用

在下面的示例中,我们将从表Client\Orders\中选择client_qualification等于MBA 的行:

SELECT Client_id, Client_name, client_qualification,order_date, price  
FROM Client    
LEFT JOIN Orders     
USING (client_id) WHERE client_qualification ='MBA';

输出

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

PostgreSQL 左连接

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

我们可以通过下面的命令来理解PostgreSQL Left join 中WHERE 和ON子句之间的区别。

在 Left Join 中,WHERE 和 ON 子句为我们提供了不同的输出。

首先,我们将WHERE 子句与左连接一起使用,如下面的命令所示:

SELECT client_name, client_profession, order_id, order_date, price  
FROM Client   
LEFT JOIN Orders     
USING(client_id) WHERE price=3500;

输出

一旦我们实现了上面的查询,我们将得到以下输出:

PostgreSQL 左连接

现在,我们将ON 子句与左连接一起使用,如下面的命令所示:

SELECT client_name, client_profession, order_id, order_date, price  
FROM Client   
LEFT JOIN Orders ON price=3500;

输出

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

PostgreSQL 左连接

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

使用 PostgreSQL Left JOIN 连接各种表

在上一节中,我们已经创建了两个表作为Client\Orders\。现在,我们使用左连接来组合各种表并从该特定表中获取记录。

因此,我们将使用 CREATE 命令再创建一个表作为Clieint_ details\,如下面的命令所示:

CREATE TABLE Client_details (  
Phone_id int primary key,   
Mobile_number bigint,  
address varchar not null  
);

一旦Clieint_细节\表已经创建成功,我们将插入一些值与INSERT命令的帮助,因为我们可以在下面的命令来查看:

INSERT INTO Client_details (Phone_id,Mobile_number,address)  
VALUES (1, 9976542310,'Florida'),  
(2, 9869456700,'New York'),  
(3, 7345672210,'Chicago'),  
(4, 9088506466,'Houston'),  
(5, 9476548901,'Los Angeles');

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

Select * from Client_details;

表 3:Client_details

PostgreSQL 左连接

现在,我们将在PostgreSQL Left Join的帮助下加入多个表,例如 Client、Orders 和 Client_details\,如下面的语句所示:

SELECT Client.client_name, order_id, order_date,Mobile_number  
FROM Client   
LEFT JOIN Client_details   
ON Client_id= phone_id   
LEFT JOIN Orders   
ON Client.client_id = Orders.client_id   
ORDER BY client_salary;

输出

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

PostgreSQL 左连接

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

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

正如我们在下面的示例中看到的,LEFT JOIN 子句用于标识没有Mobile_number客户端

SELECT client_id, client_name, mobile_number   
FROM Client   
LEFT JOIN Client_details  
ON client_id = phone_id    
WHERE Mobile_number IS NULL;

输出

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

PostgreSQL 左连接