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