PostgreSQL 连接 PostgreSQL View 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 连接的例子: 在这里,我们将创建和插入两个不同的表,我们在其中对几种类型的联接执行操作: 在下面的示例中,我们将使用 Create 命令创建一个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\表中。 上表有一些类似的车,例如雪佛兰克尔维特和梅赛德斯奔驰SL级。 现在我们将使用SELECT命令从Luxury_cars\表中获取以下数据: Select * from Luxury_cars; 输出 执行上述命令后,我们将得到以下输出: 我们将使用 SELECT 命令从Sports_cars\表中获取以下数据: Select * from Sports_cars; 输出 执行上述命令后,我们将得到以下结果: 现在,让我们实时查看不同类型的 PostgreSQL 联接的工作情况: PostgreSQL 内连接 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*表的匹配行数据。 内连接用于分析表 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 的工作: 例如 在下面的命令中,我们将使用左连接条件将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 左连接的工作 在上面的截图,左连接条件选择从记录左表(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_ID为NULL 的记录。 注意:我们可以等效地使用 LEFT JOIN 和 LEFT OUTER JOIN,因为左连接和左外连接的工作方式相似。 下面的可视化表示解释了从Left table返回行的Left join,它不包含右表中的相似行: PostgreSQL 右连接 在PostgreSQL的RIGHT JOIN用于从返回的所有行右表,可在定义ON状态下,只有从另一个表中的行,其中加入条件被满足。 该RIGHT JOIN将右表中获取数据,因为它是相反LEFT JOIN。 PostgreSQL 右连接的语法 SELECT columns FROM table1 RIGHT JOIN table2 ON table1.column = table2.column; 下面的维恩图显示了 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 右连接的工作 另外,在上述图像中,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_ID为NULL 的记录。 注意:我们可以等效地使用 RIGHT JOIN 和 RIGHT OUTER JOIN,因为 Right Join 和 Right external join 的工作原理彼此相似。 下面的可视化表示解释了从Right table返回行的Right join,其中不包含左表中的类似行: PostgreSQL 全外连接 在FULL OUTER JOIN用于返回所有记录时,有在一场比赛左表或右表中的记录。 PostgreSQL 全外连接的语法 SELECT columns FROM table1 FULL OUTER JOIN table2 ON table1.column = table2.column; 下面的维恩图显示了 PostgreSQL Full Outer join 的工作: 例如 下面的命令用于表示将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; 输出 执行上述命令后,我们将得到以下结果: 使用 where 子句的 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 View PostgreSQL 内部连接