PostgreSQL JOIN 学习笔记

在 PostgreSQL 中,JOIN 是一种用于合并两个或多个表的操作。它通过匹配表之间的列将它们连接起来,从而创建一个新的结果集。

INNER JOIN

INNER JOIN 是最常用的 Join 操作之一。它将两个表中的行连接起来,并返回只有在两个表之间存在匹配关系时才符合条件的行。

例如,我们有两个表:customer 和 order。 customer 表存储客户信息,order 表存储客户订单信息。我们想要通过 INNER JOIN 操作获取客户与订单之间的关联信息。可以如下实现:

sqlCopy Code
SELECT * FROM customer INNER JOIN order ON customer.customer_id = order.customer_id;

这样,我们就可以获得具有相应匹配的 customer 和 order 记录的结果集。

LEFT JOIN

LEFT JOIN 连接左侧表和右侧表,同时保留左侧表中所有行。如果右侧表中没有匹配的行,则该部分值为 NULL。

例如,我们还是以 customer 和 order 两个表为例,但是我们想要查询所有客户信息以及他们的订单信息(如果有)。可以如下实现:

sqlCopy Code
SELECT * FROM customer LEFT JOIN order ON customer.customer_id = order.customer_id;

这样,我们就可以获取所有客户以及他们的订单信息。

RIGHT JOIN

RIGHT JOIN 与 LEFT JOIN 类似,但是它保留的是右侧表的所有行。如果左侧表中没有匹配的行,则该部分值为 NULL。

例如,我们还是以 customer 和 order 两个表为例,但是我们想要查询所有订单信息以及它们的客户信息(如果有)。可以如下实现:

sqlCopy Code
SELECT * FROM customer RIGHT JOIN order ON customer.customer_id = order.customer_id;

这样,我们就可以获取所有订单以及相应的客户信息。

FULL OUTER JOIN

FULL OUTER JOIN 是将 LEFT JOIN 和 RIGHT JOIN 的结果合并在一起的组合形式。它返回左侧表和右侧表中所有行的匹配和未匹配部分,对于未找到匹配关系的行,它们的值为 NULL。

例如,我们还是以 customer 和 order 两个表为例,我们想要同时查询所有客户和他们的订单,并且显示那些既没有订单也没有客户信息的数据。可以如下实现:

sqlCopy Code
SELECT * FROM customer FULL OUTER JOIN order ON customer.customer_id = order.customer_id;

这样,我们就可以获得包含了所有客户和订单信息的数据集。

CROSS JOIN

CROSS JOIN 是一种笛卡尔积的 Join 操作。它返回两个表中所有可能的组合。

例如,我们有两张表:table1 和 table2,它们分别有 2 和 3 行。现在我们想要获取它们的笛卡尔积。可以如下实现:

sqlCopy Code
SELECT * FROM table1 CROSS JOIN table2;

这样,我们就可以获得所有可能的组合。在这个例子中,我们将会获取 6 行结果。

以上就是 PostgreSQL 中 Join 操作的一些常用方法和实例。