MySQL LEFT JOIN

17 Mar 2025 | 4 分钟阅读

MySQL 的 Left Join 用于查询多个表中的记录。此子句类似于 Inner Join 子句,可以紧跟在 FROM 关键字之后与 SELECT 语句一起使用。当我们使用 Left Join 子句时,它将返回第一个(左侧)表中的所有记录,即使在第二个(右侧)表中没有找到匹配的记录。如果右侧表中没有找到任何匹配的记录,则返回 null。

换句话说,Left Join 子句返回左表的所有行以及右表中的匹配记录,如果没有找到匹配的记录则返回 Null。此 Join 也可称为 **Left Outer Join** 子句。因此,Outer 是 Left Join 的可选关键字。

我们可以通过以下可视化表示来理解它,其中 Left Joins 返回左侧表中的所有记录,以及右侧表中匹配的记录。

MySQL LEFT JOIN

MySQL LEFT JOIN 语法

以下语法解释了用于连接两个或多个表的 Left Join 子句。

在上面的语法中,table1 是左侧表,table2 是右侧表。此子句根据指定的 join condition 返回 table1 中的所有记录以及 table2 中的匹配记录。

MySQL LEFT JOIN 示例

让我们看一些示例来理解 Left Join 或 Left Outer Join 子句的工作原理。

用于连接两个表的 LEFT JOIN 子句

在这里,我们将创建两个表“customers”和“orders”,其中包含以下数据。

表:customers

MySQL LEFT JOIN

表:orders

MySQL LEFT JOIN

要从两个表中选择记录,请执行以下查询。

成功执行查询后,将得到以下输出:

MySQL LEFT JOIN

MySQL LEFT JOIN with USING Clause (使用 USING 子句)

表 customers 和 orders 具有相同的列名,即 customer_id。在这种情况下,MySQL Left Join 也可以与 USING 子句一起使用来访问记录。以下语句使用带有 USING 关键字的 Left Join 子句返回客户 ID、客户姓名、职业、价格和日期。

以上语句将产生以下输出。

MySQL LEFT JOIN

MySQL LEFT JOIN with GROUP BY Clause (使用 GROUP BY 子句)

Left Join 也可以与 GROUP BY 子句一起使用。以下语句使用带有 GROUP BY 子句的 Left Join 子句返回客户 ID、客户姓名、学历、价格和日期。

以上语句将产生以下输出。

MySQL LEFT JOIN

LEFT JOIN with WHERE Clause (使用 WHERE 子句)

WHERE 子句用于从表中返回 **过滤** 后的结果。以下示例使用 Left Join 子句对此进行了说明。

此语句产生以下结果:

MySQL LEFT JOIN

MySQL LEFT JOIN 多表连接

我们已经创建了两个名为“customers”和“orders”的表。让我们再创建一个名为“contacts”的表,其中包含以下数据:

MySQL LEFT JOIN

执行以下语句来连接三个表 customers、orders 和 contacts。

成功执行上述查询后,将得到以下输出:

MySQL LEFT JOIN

使用 LEFT JOIN 子句获取不匹配的记录

当我们要获取表中没有另一张表匹配行的数据时,LEFT JOIN 子句也非常有用。

我们可以通过以下示例来理解这一点,该示例使用 LEFT JOIN 子句查找没有手机号码的客户。

以上语句返回以下输出。

MySQL LEFT JOIN

MySQL LEFT JOIN 中 WHERE 和 ON 子句的区别

在 LEFT Join 中,WHERE 和 ON 条件会产生不同的结果。我们可以查看以下查询来理解它们的区别。

WHERE 子句

它将产生以下输出,该输出返回

MySQL LEFT JOIN

ON Clause (ON 子句)

它将提供以下输出

MySQL LEFT JOIN

注意:Inner Join 子句中的 WHERE 和 ON 条件始终返回等效的结果。


下一个主题MySQL RIGHT JOIN