📜  PostgreSQL完全连接

📅  最后修改于: 2020-11-30 09:23:42             🧑  作者: Mango

PostgreSQL完全加入

在本节中,我们将了解PostgreSQL Full join的工作原理,当左侧表右侧表中的记录匹配时,该操作将返回所有记录。我们还将在PostgreSQL Full Outer join子句的帮助下学习如何使用表别名WHERE子句。

什么是PostgreSQL完全连接或完全外部连接子句?

PostgreSQL完全连接完全外部连接用于在左表右表中的记录匹配时返回所有记录。完全外部联接的主要目标是将PostgreSQL左联接PostgreSQL右联接子句的结果组合在一起,并从join子句两侧的表中返回所有相似或不匹配的行。

下面的Venn图显示了PostgreSQL Full Outer Join ,从中我们可以很容易地理解, Full Outer Join从Left表Right表返回所有数据:

PostgreSQL Full Outer Join的语法

完全外部联接或完全联接的语法如下:

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

在以上语法中, Full Outer Join关键字与SELECT命令一起使用,并且必须在FROM关键字之后编写,并且OUTER关键字是可选的。

我们将按照以下步骤在完全连接或完全外部连接条件的帮助下合并左右表:

  • 首先,我们将从两个表中定义列列表,我们希望在SELECT条件下选择数据。
  • 然后,我们将指定Right table ,它是FROM子句中的表2。
  • 最后,我们将描述Left表,即Full Outer Join子句中的表1 ,并在ON关键字之后写入连接条件。

PostgreSQL完全连接的示例

让我们看一个示例,以了解PostgreSQL Full Outer连接的工作方式:

使用PostgreSQL Full Outer Join连接两个表

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

首先,我们将使用CREATE命令创建Summer_fruitsWinter_fruits表:

CREATE TABLE Summer_fruits (
SF_ID INT PRIMARY KEY,
Summer_fruits_name VARCHAR (250) NOT NULL);

以下命令用于创建Winter_fruits表:

CREATE TABLE Winter_fruits (
WF_ID INT PRIMARY KEY,
Winter_fruits_name VARCHAR (250) NOT NULL);

执行以上命令后,已成功创建Summer_fruitsWinter_fruits表。

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

INSERT INTO Summer_fruits (SF_ID, Summer_fruits_name)
VALUES VALUES(1,'Mango'),
(2,'Watermelon'),
(3,'Apples'), 
(4,'Guava'),
(5,'Pineapple'),
(6,'Musk Melon');

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

INSERT INTO Winter_fruits (WF_ID, Winter_fruits_name)
VALUES(1,'Grape'),
(2,'Apples'), 
(3,'Mango'),
(4,'Pears'),
(5,'Pineapple'),
(6,'Cranberries'),
(7,'Bananas');

在Summer_fruits和Winter_fruits表中创建并插入值之后,执行以下命令将得到以下输出:

表1:夏季水果

Select * from Summer_fruits;

输出量

表2:冬季水果

Select * from Winter_fruits;

输出量

执行完上述命令后,我们将从Winter_fruits表中获取数据:

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

SELECT SF_ID, Summer_fruits_name, WF_ID, Winter_fruits_name
FROM Summer_fruits
FULL JOIN Winter_fruits

或者,在上述查询中,使用Full Outer Join关键字代替Full Join关键字,我们将获得类似的输出:

ON SF_ID = WF_ID;
SELECT SF_ID, Summer_fruits_name, WF_ID, Winter_fruits_name
FROM Summer_fruits
Full Outer Join Winter_fruits
ON SF_ID = WF_ID;

输出量

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

PostgreSQL完全外部联接的工作

  • 它用于获取左表(Summer_fruits)右表(Winter_fruits)的记录
  • 如果Summer_fruits的表1或左表的行与Winter_fruits的表2或右表的行匹配,则结果行将包含来自两个表的行列的列。
  • 如果联接表中的行不相似,则“完全外部联接”将为表的每一列放置NULL值。

PostgreSQL完全连接的表别名

我们将使用表别名为联接的表分配短名称,以使该命令更易于理解,因为有时编写完整的表会使我们陷入繁琐的过程。

在下面的命令中,我们将使用表别名,并返回类似的结果:

SELECT s.SF_ID, Summer_fruits_name, WF_ID, Winter_fruits_name
FROM Summer_fruits s
FULL JOIN Winter_fruits w
ON s.SF_ID =w.WF_ID;

输出量

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

PostgreSQL Full Join使用where子句

我们还可以将Full连接与WHERE条件一起使用。 WHERE子句允许我们返回过滤器结果。

在下面的示例中,我们将从Summer_fruitsWinter_fruits这两个表中选择行,其中Summer_fruits_names不等于Mango

SELECT SF_ID, Summer_fruits_name, WF_ID, Winter_fruits_name
FROM Summer_fruits
FULL JOIN Winter_fruits
ON SF_ID = WF_ID
WHERE  Summer_fruits_name != 'Mango';

输出量

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

总览

PostgreSQL完全连接或完全外部连接部分中,我们学习了以下主题:

  • 我们使用Full join子句从两个表或两个以上的表中选择数据。
  • 我们将Full join条件与表别名和WHERE子句一起使用