当前位置:实例文章 » 其他实例» [文章]图说 SQL 的 JOIN

图说 SQL 的 JOIN

发布人:shili8 发布时间:2025-02-26 15:04 阅读次数:0

**图说 SQL 的 JOIN**

JOIN 是 SQL 中一个非常重要的概念,它允许我们从多个表中提取数据,形成新的结果集。JOIN 的目的是连接两个或更多的表,使得我们能够访问这些表之间的关系。

在本文中,我们将通过图示和代码示例来讲解 JOIN 的基本概念、类型和应用场景。

**什么是 JOIN?**

JOIN 是一个用于连接多个表的 SQL 操作符。它允许我们从两个或更多的表中提取数据,形成新的结果集。JOIN 的主要目的是连接两个或更多的表,使得我们能够访问这些表之间的关系。

**JOIN 的类型**

SQL 中有几种 JOIN 类型,每种类型都有其特定的应用场景:

1. **INNER JOIN**: INNER JOIN 是最常用的 JOIN 类型,它只返回匹配的行。也就是说,只有当两个表中都存在匹配的数据时,才会被包含在结果集中。
2. **LEFT JOIN** (或 **LEFT OUTER JOIN**): LEFT JOIN 返回左边表中的所有行,右边表中匹配的行。如果没有匹配的行,则右边表中的列将填充为 NULL 值。
3. **RIGHT JOIN** (或 **RIGHT OUTER JOIN**): RIGHT JOIN 与 LEFT JOIN 相反,它返回右边表中的所有行,左边表中匹配的行。如果没有匹配的行,则左边表中的列将填充为 NULL 值。
4. **FULL JOIN** (或 **FULL OUTER JOIN**): FULL JOIN 返回两个表中所有行,包括匹配和不匹配的行。也就是说,如果一个表中有数据,而另一个表中没有相应的数据,则都会被包含在结果集中。

**JOIN 的示例**

下面是一个简单的示例,我们将使用 INNER JOIN 来连接两个表:`orders` 和 `customers`。

sql-- orders 表+---------+--------+
| order_id | customer_id |
+---------+--------+
|1 |101 |
|2 |102 |
|3 |103 |
+---------+--------+

-- customers 表+---------+-------+
| customer_id | name |
+---------+-------+
|101 | John |
|102 | Alice |
|104 | Bob |
+---------+-------+


我们可以使用 INNER JOIN 来连接这两个表,如下所示:

sqlSELECT orders.order_id, customers.nameFROM ordersINNER JOIN customers ON orders.customer_id = customers.customer_id;


结果集将如下所示:

markdown| order_id | name |
+---------+-------+
|1 | John |
|2 | Alice |
|3 | Bob |


如您所见,INNER JOIN 只返回匹配的行。

**LEFT JOIN 的示例**

下面是一个示例,我们将使用 LEFT JOIN 来连接两个表:`orders` 和 `customers`。

sql-- orders 表+---------+--------+
| order_id | customer_id |
+---------+--------+
|1 |101 |
|2 |102 |
|3 |103 |
+---------+--------+

-- customers 表+---------+-------+
| customer_id | name |
+---------+-------+
|101 | John |
|102 | Alice |
|104 | Bob |
+---------+-------+


我们可以使用 LEFT JOIN 来连接这两个表,如下所示:

sqlSELECT orders.order_id, customers.nameFROM ordersLEFT JOIN customers ON orders.customer_id = customers.customer_id;


结果集将如下所示:

markdown| order_id | name |
+---------+-------+
|1 | John |
|2 | Alice |
|3 | NULL |


如您所见,LEFT JOIN 返回左边表中的所有行,右边表中匹配的行。如果没有匹配的行,则右边表中的列将填充为 NULL 值。

**RIGHT JOIN 的示例**

下面是一个示例,我们将使用 RIGHT JOIN 来连接两个表:`orders` 和 `customers`。

sql-- orders 表+---------+--------+
| order_id | customer_id |
+---------+--------+
|1 |101 |
|2 |102 |
|3 |103 |
+---------+--------+

-- customers 表+---------+-------+
| customer_id | name |
+---------+-------+
|101 | John |
|102 | Alice |
|104 | Bob |
+---------+-------+


我们可以使用 RIGHT JOIN 来连接这两个表,如下所示:

sqlSELECT orders.order_id, customers.nameFROM ordersRIGHT JOIN customers ON orders.customer_id = customers.customer_id;


结果集将如下所示:

markdown| order_id | name |
+---------+-------+
|1 | John |
|2 | Alice |
| NULL | Bob |


如您所见,RIGHT JOIN 返回右边表中的所有行,左边表中匹配的行。如果没有匹配的行,则左边表中的列将填充为 NULL 值。

**FULL JOIN 的示例**

下面是一个示例,我们将使用 FULL JOIN 来连接两个表:`orders` 和 `customers`。

sql-- orders 表+---------+--------+
| order_id | customer_id |
+---------+--------+
|1 |101 |
|2 |102 |
|3 |103 |
+---------+--------+

-- customers 表+---------+-------+
| customer_id | name |
+---------+-------+
|101 | John |
|102 | Alice |
|104 | Bob |
+---------+-------+


我们可以使用 FULL JOIN 来连接这两个表,如下所示:

sqlSELECT orders.order_id, customers.nameFROM ordersFULL JOIN customers ON orders.customer_id = customers.customer_id;


结果集将如下所示:

markdown| order_id | name |
+---------+-------+
|1 | John |
|2 | Alice |
|3 | NULL |
| NULL | Bob |


如您所见,FULL JOIN 返回两个表中所有行,包括匹配和不匹配的行。

**结论**

JOIN 是 SQL 中一个非常重要的概念,它允许我们从多个表中提取数据,形成新的结果集。JOIN 的主要目的是连接两个或更多的表,使得我们能够访问这些表之间的关系。在本文中,我们讲解了 JOIN 的基本概念、类型和应用场景,并通过图示和代码示例来演示了每种类型的 JOIN。

希望这篇文章能帮助您更好地理解 SQL 中的 JOIN 概念。

相关标签:oracle数据库sql
其他信息

其他资源

Top