PostgreSQL 连接


PostgreSQL 连接

在本节中,我们将简要了解几种PostgreSQL joins的工作方式,例如 Inner join, Left join, Right join, and Full Outer join

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

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

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

  • Inner join
  • Left join
  • Right join
  • Cross join
  • Full outer join
  • Natural join
  • Self-join.

下图显示了最重要的 PostgreSQL 连接,我们将在 PostgreSQL 教程的这一部分进行解释。

PostgreSQL 连接

PostgreSQL 联接示例

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

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

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

CREATE TABLE Luxury_cars (  
L_ID INT PRIMARY KEY,  
luxury_car_names VARCHAR (250) NOT NULL);

输出

一旦我们执行了上面的命令,我们将得到下面的消息,显示Luxury_cars\表已经成功创建。

PostgreSQL 连接

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

CREATE TABLE Sports_cars (  
S_ID INT PRIMARY KEY,  
sports_car_names VARCHAR (250) NOT NULL);

输出

一旦我们执行了上面的命令,我们将得到下面的消息,显示Sports_cars\表已经成功创建。

PostgreSQL 连接

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

INSERT INTO Luxury_cars (L_ID, luxury_car_names)  
VALUES  
(1, 'Chevrolet Corvette'),  
(2, 'Mercedes Benz SL Class'),  
(3, 'Audi A7'),  
(4, 'Genesis G90'),  
(5,'Lincoln Continental');

输出

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

PostgreSQL 连接

就像我们在Luxury_cars\表中插入值一样,我们也将在Insert 命令的帮助下将值插入到Sports_cars\表中:

INSERT INTO Sports_cars (S_ID, sports_car_names)  
VALUES  
 (1, 'BMW Z4'),  
 (2, 'Nissan 370Z'),  
 (3, 'Chevrolet Corvette'),  
 (4, 'Mercedes Benz SL Class'),  
(5,'Subaru BRZ');

输出

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

PostgreSQL 连接

上表有一些类似的车,例如雪佛兰克尔维特梅赛德斯奔驰SL级

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

Select * from Luxury_cars;

输出

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

PostgreSQL 连接

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

Select * from Sports_cars;

输出

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

PostgreSQL 连接

现在,让我们实时查看不同类型的 PostgreSQL 联接的工作情况:

PostgreSQL 内连接

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

PostgreSQL 内连接的语法

SELECT columns    
FROM table1     
INNER JOIN table2    
ON table1.column = table2.column;

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

PostgreSQL 连接

例如

我们将通过上面的表(Luxury_cars 和 Sports_cars)来了解 PostgreSQL 内连接。

以下命令将通过匹配Luxury_car_namesports_car_name列中的值将第一个表 ( *Luxury_cars* ) 与第二个表 (Sports_carsv)连接起来

SELECT L_ID, luxury_car_names, S_ID, sports_car_names  
FROM Luxury_cars  
INNER JOIN Sports_cars  
ON luxury_car_names= sports_car_names;

输出

一旦我们实现了上面的命令,我们将得到下面的结果,我们可以在其中看到来自Luxury_cars\和*Sports_cars*表的匹配行数据。

PostgreSQL 连接

  • 内连接用于分析表 A ( *Luxury_cars* ) 中的每一行。
  • 它将luxury_car_name列中的记录与表B ( Sports_cars\ )中每一行的sports_car_name列中的记录相等\
  • 如果这些记录相似,则内部联接创建一个包含来自两个表的列的新行,并将特定行增强到输出中。

PostgreSQL 左连接

PostgreSQL LEFT JOIN 用于返回左表中的所有行,可以在ON 条件中定义,并且仅返回其他表中满足联接条件的那些行。

PostgreSQL 左连接的语法

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

下面的可视化表示显示了 PostgreSQL Left join 的工作:

PostgreSQL 连接

例如

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

在 Left join 子句中,表 A 或第一个表称为左表\表 B 或第二个表称为右表\

SELECT L_ID, luxury_car_names, S_ID, sports_car_names  
FROM Luxury_cars  
LEFT JOIN Sports_cars  
ON luxury_car_names= sports_car_names;

输出

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

PostgreSQL 连接

PostgreSQL 左连接的工作

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

PostgreSQL 左连接与 Where 子句

我们也可以使用带有 WHERE 条件的左连接在下面的示例中,我们将从左表 ( Luxury_cars\ ) 中选择行,该表不包含右表 ( Sports_cars\ )中的相似行:

SELECT L_ID, luxury_car_names, S_ID, sports_car_names  
FROM Luxury_cars  
LEFT JOIN Sports_cars  
ON luxury_car_names= sports_car_names  
WHERE S_ID IS NULL;

输出

执行上述命令后,我们将获得以下输出,其中显示S_IDNULL 的记录。

PostgreSQL 连接

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

下面的可视化表示解释了从Left table返回行的Left join,它不包含右表中的相似行:

PostgreSQL 连接

PostgreSQL 右连接

PostgreSQL的RIGHT JOIN用于从返回的所有行右表,可在定义ON状态下,只有从另一个表中的行,其中加入条件被满足。

RIGHT JOIN将右表中获取数据,因为它是相反LEFT JOIN

PostgreSQL 右连接的语法

SELECT columns    
FROM table1    
RIGHT JOIN table2    
ON table1.column = table2.column;

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

PostgreSQL 连接

例如

下面的命令用于表示Right join的工作,其中我们将Luxury_cars表与Sports_cars表连接起来:

SELECT L_ID, luxury_car_names, S_ID, sports_car_names  
FROM Luxury_cars  
RIGHT JOIN Sports_cars  
ON luxury_car_names= sports_car_names;

输出

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

PostgreSQL 连接

PostgreSQL 右连接的工作

  • 另外,在上述图像中,RIGHT JOIN相当于在每个值Sports_car_names在每一行的列Sports_cars\表中的每个值luxury_cars_name所有行的在列Luxury_cars\表。
  • 如果这些值相似,则右连接生成一个新行,其中包含来自两个表(Luxury_cars 和 Sports_cars)的列。
  • 假设,如果值不相似,那么右连接也会产生一个新行,它涉及两个表中的列并将其增强为输出。

PostgreSQL 右连接与 Where 子句

同样,我们也可以使用带有 WHERE 条件的正确连接例如,我们将使用 where 子句从右表 ( Sports_cars\ ) 中选择行,该表不包含左表 ( Luxury_cars\ )中的相似行:

SELECT L_ID, luxury_car_names, S_ID, sports_car_names  
FROM Luxury_cars  
RIGHT JOIN Sports_cars  
ON luxury_car_names= sports_car_names  
WHERE L_ID IS NULL;

输出

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

PostgreSQL 连接

注意:我们可以等效地使用 RIGHT JOIN 和 RIGHT OUTER JOIN,因为 Right Join 和 Right external join 的工作原理彼此相似。

下面的可视化表示解释了从Right table返回行的Right join,其中不包含左表中的类似行:

PostgreSQL 连接

PostgreSQL 全外连接

FULL OUTER JOIN用于返回所有记录时,有在一场比赛左表右表中的记录。

PostgreSQL 全外连接的语法

SELECT columns    
FROM table1    
FULL OUTER JOIN table2    
ON table1.column = table2.column;

下面的维恩图显示了 PostgreSQL Full Outer join 的工作:

PostgreSQL 连接

例如

下面的命令用于表示将Luxury_cars表与Sports_cars连接起来的Full Outer join的工作。

SELECT L_ID, luxury_car_names, S_ID, sports_car_names  
FROM Luxury_cars  
FULL OUTER JOIN Sports_cars  
ON luxury_car_names= sports_car_names;

输出

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

PostgreSQL 连接

使用 where 子句的 PostgreSQL 全外连接

下面的维恩图显示了从表中返回行的完整外部联接,该表不包含其他表中的匹配行:

PostgreSQL 连接

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

SELECT L_ID, luxury_car_names, S_ID, sports_car_names  
FROM Luxury_cars  
FULL OUTER JOIN Sports_cars  
ON luxury_car_names= sports_car_names  
WHERE L_ID IS NULL OR S_ID IS NULL;

输出

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

PostgreSQL 连接

概述

在本节中,我们学习了几种PostgreSQL 连接的工作方式,这些连接组合了来自各种连接表的数据。