📅  最后修改于: 2020-11-30 09:23:42             🧑  作者: Mango
在本节中,我们将了解PostgreSQL Full join的工作原理,当左侧表或右侧表中的记录匹配时,该操作将返回所有记录。我们还将在PostgreSQL Full Outer join子句的帮助下学习如何使用表别名WHERE子句。
PostgreSQL完全连接或完全外部连接用于在左表或右表中的记录匹配时返回所有记录。完全外部联接的主要目标是将PostgreSQL左联接和PostgreSQL右联接子句的结果组合在一起,并从join子句两侧的表中返回所有相似或不匹配的行。
下面的Venn图显示了PostgreSQL Full Outer Join ,从中我们可以很容易地理解, Full Outer Join从Left表和Right表返回所有数据:
完全外部联接或完全联接的语法如下:
SELECT columns
FROM table1
FULL [OUTER] JOIN table2
ON table1.column = table2.column;
在以上语法中, Full Outer Join关键字与SELECT命令一起使用,并且必须在FROM关键字之后编写,并且OUTER关键字是可选的。
我们将按照以下步骤在完全连接或完全外部连接条件的帮助下合并左右表:
让我们看一个示例,以了解PostgreSQL Full Outer连接的工作方式:
为此,我们将在CREATE命令的帮助下创建两个名为Summer_fruits和Winter_fruits表的表,并使用INSERT命令插入一些值。
首先,我们将使用CREATE命令创建Summer_fruits和Winter_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_fruits和Winter_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_fruits和Winter_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完全外部联接的工作
我们将使用表别名为联接的表分配短名称,以使该命令更易于理解,因为有时编写完整的表会使我们陷入繁琐的过程。
在下面的命令中,我们将使用表别名,并返回类似的结果:
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;
输出量
执行上述命令后,我们将获得以下输出:
我们还可以将Full连接与WHERE条件一起使用。 WHERE子句允许我们返回过滤器结果。
在下面的示例中,我们将从Summer_fruits和Winter_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完全连接或完全外部连接部分中,我们学习了以下主题: