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

PostgreSQL 中的 Joins 是什么?

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

PostgreSQL Join 类型

PostgreSQL 中有两种 Join 类型

  • Inner Joins
  • Outer Joins

PostgreSQL Inner Join

PostgreSQL 中有 3 种 Inner Joins 类型

  • Theta join
  • Natural join
  • EQUI join

Theta Join

Theta join 允许我们根据由 theta 表示的条件连接两个表。Theta join 可以使用所有比较运算符。在大多数情况下,theta join 被称为 inner join。

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

语法

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

考虑 Demo 数据库的以下表

Book

PostgreSQL Theta Join

价格

PostgreSQL Theta Join

我们想查看每本书的名称和相应的价格。我们可以运行以下命令

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

这将返回以下内容

PostgreSQL Theta Join

只有 3 行满足连接条件。

EQUI Join

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

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

这将返回以下内容

PostgreSQL EQUI Join

已根据公共列,即 id 列,从两个表中返回记录。

Natural Join

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

SELECT *
FROM Book
NATURAL JOIN Price;

这将返回以下内容

PostgreSQL Natural Join

只返回了一个 id 列。NATURAL JOIN 注意到了 id 列在两个表中是公共的。只返回了一个。

Postgres Outer Join

PostgreSQL 中有 3 种 Outer Joins 类型

  • 左外连接
  • Right Outer Join
  • Full Outer Join

Postgres Left Outer Join

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 Left Outer Join

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

Postgres Right Outer Join

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 Right Outer Join

Price 表中的所有行都已返回。只有 Book 表中满足连接条件的行被返回了。由于没有找到匹配项,第三行没有名称值。

PostgreSQL 中的 Full Outer Join

这种 JOIN 类型将返回左侧表中的所有行,以及右侧表中的所有行,并在连接条件不满足时显示 NULL。

语法

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 Full Outer Join

所有表的所有行都已返回,在未找到匹配项的地方显示为 NULL。

使用 pgAdmin

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

pgAdmin Inner Join

如何在 pgAdmin 中使用 PostgreSQL 的 Theta Join

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

步骤 1) 登录您的 pgAdmin 账户

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

步骤 2)创建 Demo 数据库

  1. 在左侧的导航栏中,点击 Databases。
  2. 点击 Demo。

pgAdmin Inner Join

步骤 3)输入查询

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

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

步骤 4)执行查询

点击 Execute 按钮

pgAdmin Inner Join

它应该返回以下内容

pgAdmin Inner Join

EQUI Join

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

步骤 2)

  1. 在左侧的导航栏中,点击 Databases。
  2. 点击 Demo。

pgAdmin EQUI Join

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

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

步骤 4) 点击 Execute 按钮。

pgAdmin EQUI Join

它应该返回以下内容

pgAdmin EQUI Join

Natural Join

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

步骤 2)

  1. 在左侧的导航栏中,点击 Databases。
  2. 点击 Demo。

pgAdmin Natural Join

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

SELECT *
FROM Book 
NATURAL JOIN Price;

步骤 4) 点击 Execute 按钮。

pgAdmin Natural Join

它应该返回以下内容

pgAdmin Natural Join

pgAdmin Simple Inner Join

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

步骤 2)

  1. 在左侧的导航栏中,点击 Databases。
  2. 点击 Demo。

pgAdmin Simple Inner Join

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

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

步骤 4) 点击 Execute 按钮。

pgAdmin Simple Inner Join

它应该返回以下内容

pgAdmin Simple Inner Join

pgAdmin Outer Join

左外连接

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

步骤 2)

  1. 在左侧的导航栏中,点击 Databases。
  2. 点击 Demo。

pgAdmin Left Outer Join

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

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

步骤 4) 点击 Execute 按钮。

pgAdmin Left Outer Join

它应该返回以下内容

pgAdmin Left Outer Join

Right Outer Join

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

步骤 2)

  1. 在左侧的导航栏中,点击 Databases。
  2. 点击 Demo。

pgAdmin Right Outer Join

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

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

步骤 4) 点击 Execute 按钮。

pgAdmin Right Outer Join

它应该返回以下内容

pgAdmin Right Outer Join

Full Outer Join

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

步骤 2)

  1. 在左侧的导航栏中,点击 Databases。
  2. 点击 Demo。

pgAdmin Full Outer Join

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

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

步骤 4) 点击 Execute 按钮。

pgAdmin Full Outer Join

它应该返回以下内容

pgAdmin Full Outer Join

摘要

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

下载本教程中使用的数据库