PostgreSQL 连接类型及示例:内连接、外连接、左连接、右连接

什么是 Join PostgreSQL?

PostgreSQL 加入 用于从多个表中检索数据。使用连接,我们可以将 SELECT 和 JOIN 语句合并为一个语句。将 JOIN 条件添加到语句中,并返回所有满足条件的行。不同表的值基于公共列进行组合。公共列通常是第一个表中的主键和第二个表中的外键。

PostgreSQL 连接类型

有两种类型的连接 PostgreSQL:

  • 内连接
  • 外连接

PostgreSQL 内部联接

内连接有 3 种类型 PostgreSQL:

  • Theta 加入
  • 自然连接
  • 加入EQUI

Theta 加入

西塔连接允许根据西塔表示的条件连接两个表。西塔连接可以与所有比较运算符一起使用。在大多数情况下,西塔连接称为内连接。

θ 连接是最基本的 JOIN 类型。它将返回满足 JOIN 条件的表中的所有行。

语法:

SELECT columns
FROM table-1 
INNER JOIN table-2
ON table-1.column = table-2.column;

考虑以下 Demo 数据库的表:

书:

PostgreSQL Theta 加入

价格:

PostgreSQL Theta 加入

我们想要查看每本书的名称以及对应的价格。我们可以运行以下命令:

SELECT Book.name, Price.price 
FROM Book 
INNER JOIN Price 
ON Book.id = Price.id;   

这将返回以下内容:

PostgreSQL Theta 加入

只有 3 行满足连接条件。

加入EQUI

EQUI 连接为我们提供了一种基于主键/外键关系连接两个表的方法。例如:

SELECT *
FROM Book 
JOIN Price ON Book.id = Price.id;

这将返回以下内容:

PostgreSQL 加入EQUI

根据公共列(即 id 列),两个表都返回了记录。

自然加入

这种类型的连接为我们提供了编写 EQUI 连接的另一种方法。我们可以通过添加 NATURAL 关键字来改进前面的示例,如下所示:

SELECT *
FROM Book
NATURAL JOIN Price;

这将返回以下内容:

PostgreSQL 自然加入

仅返回了一个 id 列。NATURAL JOIN 能够注意到 id 列在两个表中是共同的。仅返回了一个。

Postgres 外连接

外连接有 3 种类型 PostgreSQL:

  • 左外连接
  • 右外连接
  • 完全外部加入

Postgres 左外连接

LEFT OUTER JOIN 将返回左侧表中的所有行,并且仅返回右侧表中满足连接条件的行。

语法:

SELECT columns
FROM table-1
LEFT OUTER JOIN table-2
ON table-1.column = table-2.column;

我们需要查看每本书的名字以及对应的价格,可以运行以下命令:

SELECT Book.name, Price.price 
FROM Book   
LEFT JOIN Price 
ON Book.id = Price.id;   

这将返回以下内容:

Postgres 左外连接

Book 表中的所有 4 行都已返回。Price 表中只有 3 行满足连接条件。因此返回了它们。最后一本书没有相应的价格值。

Postgres 右外连接

RIGHT OUTER JOIN 返回右侧表中的所有行以及左侧表中满足连接条件的行。

语法:

SELECT columns
FROM table-1
RIGHT OUTER JOIN table-2
ON table-1.column = table-2.column;

例如:

SELECT Book.name, Price.price 
FROM Book
RIGHT JOIN Price 
ON Book.id = Price.id;

这将返回以下内容:

Postgres 右外连接

Price 表中的所有行都已返回。仅返回 Book 表中满足连接条件的行。3rd 由于未找到匹配项,因此行没有名称值。

全外连接 PostgreSQL

这种类型的 JOIN 将返回左侧表中的所有行以及右侧表中的所有不满足连接条件的为空的行。

语法:

SELECT columns
FROM table-1
FULL OUTER JOIN table-2
ON table-1.column = table-2.column;

例如:

SELECT Book.name, Price.price 
FROM Book
FULL OUTER JOIN Price 
ON Book.id = Price.id;

这将返回以下内容:

Postgres 全外连接

所有表的所有行都已返回,其中未找到匹配项的位置为空。

使用 pgAdmin

上述任务可以在 pgAdmin 中按如下方式完成:

pgAdmin 内连接

如何使用 Theta 加入 PostgreSQL 使用 pgAdmin

以下是使用 pgAdmin 在 Postgres 中使用 Theta Join 的步骤:

步骤 1)登录你的 pgAdmin 账户

打开 pgAdmin 并使用您的凭据登录

步骤2)创建演示数据库

  1. 从左侧导航栏中单击数据库。
  2. 单击“演示”。

pgAdmin 内连接

步骤 3)输入查询

在查询编辑器中输入以下查询:

SELECT Book.name, Price.price 
FROM Book 
INNER JOIN Price 
ON Book.id = Price.id;   

步骤4)执行查询

单击执行按钮

pgAdmin 内连接

它应该返回以下内容:

pgAdmin 内连接

加入EQUI

步骤1) 登录您的 pgAdmin 帐户。

步骤2)

  1. 从左侧导航栏中单击数据库。
  2. 单击“演示”。

pgAdmin EQUI 加入

步骤3) 在查询编辑器中输入查询:

SELECT *
FROM Book 
JOIN Price ON Book.id = Price.id;

步骤4) 单击执行按钮。

pgAdmin EQUI 加入

它应该返回以下内容:

pgAdmin EQUI 加入

自然加入

步骤1) 登录您的 pgAdmin 帐户。

步骤2)

  1. 从左侧导航栏中单击数据库。
  2. 单击“演示”。

pgAdmin 自然连接

步骤3) 在查询编辑器中输入查询:

SELECT *
FROM Book 
NATURAL JOIN Price;

步骤4) 单击执行按钮。

pgAdmin 自然连接

它应该返回以下内容:

pgAdmin 自然连接

pgAdmin 简单内连接

步骤1) 登录您的 pgAdmin 帐户。

步骤2)

  1. 从左侧导航栏中单击数据库。
  2. 单击“演示”。

pgAdmin 简单内连接

步骤3) 在查询编辑器中输入查询:

SELECT Book.name, Price.price 
FROM Book 
INNER JOIN Price 
ON Book.id = Price.id;   

步骤4) 单击执行按钮。

pgAdmin 简单内连接

它应该返回以下内容:

pgAdmin 简单内连接

pgAdmin 外连接

左外连接

步骤1) 登录您的 pgAdmin 帐户。

步骤2)

  1. 从左侧导航栏中单击数据库。
  2. 单击“演示”。

pgAdmin 左外连接

步骤3) 在查询编辑器中输入查询:

SELECT Book.name, Price.price 
FROM Book   
LEFT JOIN Price 
ON Book.id = Price.id;   

步骤4) 单击执行按钮。

pgAdmin 左外连接

它应该返回以下内容:

pgAdmin 左外连接

右外连接

步骤1) 登录您的 pgAdmin 帐户。

步骤2)

  1. 从左侧导航栏中单击数据库。
  2. 单击“演示”。

pgAdmin 右外连接

步骤3) 在查询编辑器中输入查询:

SELECT Book.name, Price.price 
FROM Book
RIGHT JOIN Price 
ON Book.id = Price.id;

步骤4) 单击执行按钮。

pgAdmin 右外连接

它应该返回以下内容:

pgAdmin 右外连接

完全外部加入

步骤1) 登录您的 pgAdmin 帐户。

步骤2)

  1. 从左侧导航栏中单击数据库。
  2. 单击“演示”。

pgAdmin 完全外连接

步骤3) 在查询编辑器中输入查询:

SELECT Book.name, Price.price 
FROM Book
FULL OUTER JOIN Price 
ON Book.id = Price.id;

步骤4) 单击执行按钮。

pgAdmin 完全外连接

它应该返回以下内容:

pgAdmin 完全外连接

结语

  • In PostgreSQL,当我们需要从多个表中检索值时,我们使用 JOIN。
  • INNER JOIN 是最基本的 JOIN 类型。它返回满足指定 JOIN 条件的所有记录。
  • LEFT OUTER JOIN 返回左侧表中的所有行以及仅返回另一个表中满足连接条件的行。
  • RIGHT OUTER JOIN 返回右侧表中的所有行以及仅返回满足连接条件的另一个表中的行。
  • 这种类型的 JOIN 将返回左表中的所有行以及右表中的所有不满足连接条件的为空的行。

下载本教程使用的数据库