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
价格
我们想查看每本书的名称和相应的价格。我们可以运行以下命令
SELECT Book.name, Price.price FROM Book INNER JOIN Price ON Book.id = Price.id;
这将返回以下内容
只有 3 行满足连接条件。
EQUI Join
EQUI join 为我们提供了一种基于主键/外键关系连接两个表的方法。例如
SELECT * FROM Book JOIN Price ON Book.id = Price.id;
这将返回以下内容
已根据公共列,即 id 列,从两个表中返回记录。
Natural Join
这种 join 类型为我们提供了另一种编写 EQUI join 的方法。我们可以通过添加 NATURAL 关键字来改进我们之前的示例,如下所示
SELECT * FROM Book NATURAL JOIN Price;
这将返回以下内容
只返回了一个 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;
这将返回以下内容
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;
这将返回以下内容
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;
这将返回以下内容
所有表的所有行都已返回,在未找到匹配项的地方显示为 NULL。
使用 pgAdmin
上述任务可以在 pgAdmin 中按以下方式完成
pgAdmin Inner Join
如何在 pgAdmin 中使用 PostgreSQL 的 Theta Join
以下是使用 pgAdmin 在 Postgres 中使用 Theta Join 的步骤
步骤 1) 登录您的 pgAdmin 账户
打开 pgAdmin 并使用您的凭据登录
步骤 2)创建 Demo 数据库
- 在左侧的导航栏中,点击 Databases。
- 点击 Demo。
步骤 3)输入查询
在查询编辑器中输入以下查询
SELECT Book.name, Price.price FROM Book INNER JOIN Price ON Book.id = Price.id;
步骤 4)执行查询
点击 Execute 按钮
它应该返回以下内容
EQUI Join
步骤 1) 登录您的 pgAdmin 账户。
步骤 2)
- 在左侧的导航栏中,点击 Databases。
- 点击 Demo。
步骤 3) 在查询编辑器中输入查询
SELECT * FROM Book JOIN Price ON Book.id = Price.id;
步骤 4) 点击 Execute 按钮。
它应该返回以下内容
Natural Join
步骤 1) 登录您的 pgAdmin 账户。
步骤 2)
- 在左侧的导航栏中,点击 Databases。
- 点击 Demo。
步骤 3) 在查询编辑器中输入查询
SELECT * FROM Book NATURAL JOIN Price;
步骤 4) 点击 Execute 按钮。
它应该返回以下内容
pgAdmin Simple Inner Join
步骤 1) 登录您的 pgAdmin 账户。
步骤 2)
- 在左侧的导航栏中,点击 Databases。
- 点击 Demo。
步骤 3) 在查询编辑器中输入查询
SELECT Book.name, Price.price FROM Book INNER JOIN Price ON Book.id = Price.id;
步骤 4) 点击 Execute 按钮。
它应该返回以下内容
pgAdmin Outer Join
左外连接
步骤 1) 登录您的 pgAdmin 账户。
步骤 2)
- 在左侧的导航栏中,点击 Databases。
- 点击 Demo。
步骤 3) 在查询编辑器中输入查询
SELECT Book.name, Price.price FROM Book LEFT JOIN Price ON Book.id = Price.id;
步骤 4) 点击 Execute 按钮。
它应该返回以下内容
Right Outer Join
步骤 1) 登录您的 pgAdmin 账户。
步骤 2)
- 在左侧的导航栏中,点击 Databases。
- 点击 Demo。
步骤 3) 在查询编辑器中输入查询
SELECT Book.name, Price.price FROM Book RIGHT JOIN Price ON Book.id = Price.id;
步骤 4) 点击 Execute 按钮。
它应该返回以下内容
Full Outer Join
步骤 1) 登录您的 pgAdmin 账户。
步骤 2)
- 在左侧的导航栏中,点击 Databases。
- 点击 Demo。
步骤 3) 在查询编辑器中输入查询
SELECT Book.name, Price.price FROM Book FULL OUTER JOIN Price ON Book.id = Price.id;
步骤 4) 点击 Execute 按钮。
它应该返回以下内容
摘要
- 在 PostgreSQL 中,当我们需要从多个表中检索值时,我们使用 JOINs。
- INNER JOIN 是最基本的 JOIN 类型。它返回所有满足指定 JOIN 条件的记录。
- LEFT OUTER JOIN 返回左侧表中的所有行,以及另一表中满足连接条件的行。
- RIGHT OUTER JOIN 返回右侧表中的所有行,以及另一表中满足连接条件的行。
- 这种 JOIN 类型返回左侧表中的所有行,以及右侧表中的所有行,并在连接条件不满足时显示 NULL。