📅  最后修改于: 2020-11-30 09:19:06             🧑  作者: Mango
在本节中,我们将简要了解几种类型的PostgreSQL联接的工作方式,例如内部联接,左联接,右联接和全外联接。
PostgreSQL JOINS与SELECT命令一起使用,这有助于我们从各种表中检索数据。我们可以将Select和Joins语句合并到一个命令中。每当我们想要从两个或多个表中获取记录时,我们将执行joins命令。
它用于根据连接的表之间的标准列的数据合并来自一个或多个表的列。通常,第一个表的标准列是主键列,第二个表列是外键列。
在PostgreSQL中,我们有各种类型的联接,如下所示:
下图显示了最重要的PostgreSQL联接,我们将在PostgreSQL教程的这一部分中进行解释。
让我们看一些不同类型的PostgreSQL联接的例子:
在这里,我们将创建并插入两个不同的表,在其中对几种类型的联接执行操作:
在下面的示例中,我们将使用“创建”命令创建Luxury_cars表。
CREATE TABLE Luxury_cars (
L_ID INT PRIMARY KEY,
luxury_car_names VARCHAR (250) NOT NULL);
输出量
一旦执行了上面的命令,我们将获得以下消息,该消息显示Luxury_cars表已成功创建。
再次在这里,我们将使用Create命令来创建Sports_cars表,如下所示:
CREATE TABLE Sports_cars (
S_ID INT PRIMARY KEY,
sports_car_names VARCHAR (250) NOT NULL);
输出量
一旦执行了上面的命令,我们将得到以下消息,该消息显示Sports_cars表已成功创建。
之后,我们将使用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表中。
就像我们在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表中。
上表中有一些类似的汽车,例如Chevrolet Corvette和Mercedes Benz SL Class 。
现在,我们将使用SELECT命令从Luxury_cars表中获取以下数据:
Select * from Luxury_cars;
输出量
执行完以上命令后,我们将得到以下输出:
我们将使用SELECT命令从Sports_cars表中获取以下数据:
Select * from Sports_cars;
输出量
执行完上述命令后,我们将得到以下结果:
现在,让我们实时查看不同类型的PostgreSQL Join的工作情况:
PostgreSQL INNER JOIN用于返回满足连接条件的各种表中的所有行。
PostgreSQL内部连接的语法
SELECT columns
FROM table1
INNER JOIN table2
ON table1.column = table2.column;
下面的可视表示形式显示了PostgreSQL内部联接的工作方式:
例如
我们将使用上面的表( Luxury_cars和Sports_cars )来了解PostgreSQL内部联接。
下面的命令通过匹配Luxury_car_name和sports_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 LEFT JOIN用于返回左表中的所有行,这些表可以在ON条件中定义,而仅返回满足连接条件的其他表中的那些行。
PostgreSQL左连接的语法
SELECT columns
FROM table1
LEFT JOIN table2
ON table1.column = table2.column;
下面的可视表示形式显示了PostgreSQL Left join的工作:
例如
在下面的命令中,我们将使用Left Join条件将Luxury_cars表与Sports_cars表联接。
在Left连接子句中,表A或第一个表称为Left表,而表B或第二个表称为Right表。
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 Left Join的工作
我们还可以在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_ID为NULL的那些记录。
注意:我们可以同时使用LEFT JOIN和LEFT OUTER JOIN,因为Left联接和Left外部联接的工作方式相似。
下面的视觉表示说明了Left联接,该联接返回Left表中的行,其中Left表中不包含相似的行:
PostgreSQL RIGHT JOIN用于返回Right表中的所有行,Right表可以在ON条件中定义,并且仅返回满足连接条件的另一个表中的那些行。
RIGHT JOIN将与LEFT JOIN相反,从右表获取数据。
PostgreSQL右连接的语法
SELECT columns
FROM table1
RIGHT JOIN table2
ON table1.column = table2.column;
下面的Venn图显示了PostgreSQL右连接的工作方式:
例如
下面的命令用于表示右联接的工作,在该联接中,我们将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右连接的工作
同样,我们也可以在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_ID为NULL的那些记录。
注意:我们可以同时使用RIGHT JOIN和RIGHT OUTER JOIN,因为Right Join和Right外联接的工作彼此相似。
下面的可视表示形式说明了Right联接,该联接从Right表返回行,Right表在左表中不包含相似的行:
当左表或右表中的记录匹配时,将使用FULL OUTER JOIN返回所有记录。
PostgreSQL Full Outer Join的语法
SELECT columns
FROM table1
FULL OUTER JOIN table2
ON table1.column = table2.column;
下面的Venn图显示了PostgreSQL Full Outer连接的工作方式:
例如
以下命令用于表示将Luxury_cars表与Sports_cars表联接在一起的Full Outer联接的工作。
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;
输出量
执行完上述命令后,我们将得到以下结果:
下面的Venn图显示了完整的外部联接,该联接从一个表返回行,该表不包含另一个表中的匹配行:
要返回表中没有其他行的表中的行,我们将使用带有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联接的工作方式,这些联接结合了来自各种连接表的数据。