MySQL DELETE JOIN

2025年3月17日 | 阅读 3 分钟

DELETE 查询是数据操作语言 (DML) 的一个子集,用于从表中删除行。在面试中,如何删除 MySQL 中的 JOIN 是一个非常常见的问题。在 MySQL 中使用 delete join 语句并不是一个简单的过程。在本节中,我们将介绍如何使用 INNER JOIN 或 LEFT JOIN 在 DELETE 查询中删除多个表中的记录。

DELETE JOIN 与 INNER JOIN

Inner Join 查询可以与 Delete 查询一起使用,用于删除一个表中满足指定条件的行,以及另一个表中匹配的行。

语法

以下是可以用来使用 Inner Join 删除一个以上表中行的语法。

在这里,目标是要从中删除行的表名,通过匹配指定的条件。假设您想在 student_id = 2 时从表 T1T2 中删除行,则可以将其写成以下语句。

在上面的语法中,目标表(T1 和 T2)写在 DELETE 和 FROM 关键字之间。如果我们省略其中的任何一个表名,则 delete 语句仅删除单个表中的行。在 ON 关键字旁边写的表达式是匹配您将要删除的表中的行的条件。

示例

假设我们有两个表 studentscontacts,它们包含以下数据。

表:students

MySQL DELETE JOIN

表:contacts

MySQL DELETE JOIN

执行以下查询以了解使用 Inner Join 的 Delete Join。此语句删除在两个表中具有相同 id 的行。

成功执行后,它将显示以下消息。

MySQL DELETE JOIN

现在,运行以下查询以验证行是否已成功删除。

您可以看到 student_id=4 的行已被删除。

MySQL DELETE JOIN MySQL DELETE JOIN

DELETE JOIN 与 LEFT JOIN

我们已经学习了 SELECT 语句中的 LEFT JOIN 子句,它返回左(第一个)表中的所有行,以及另一个表中匹配或不匹配的行。同样,我们也可以将 LEFT JOIN 子句与 DELETE 关键字一起使用,用于删除左(第一个)表中没有在右(第二个)表中找到匹配行的行。

以下查询更清晰地解释了 DELETE 语句如何使用 LEFT JOIN 删除 Table1 中没有在 Table2 中找到匹配行的行。

在上面的查询中,请注意,我们只会在 DELETE 关键字中使用 Table1,而不是像 INNER JOIN 语句那样同时使用两个表。

示例

让我们在数据库中创建一个名为“contacts”和“customers”的表,其中包含以下数据。

表:contacts

MySQL DELETE JOIN

表:customers

MySQL DELETE JOIN

执行以下语句,该语句删除没有 cellphone 号码的客户。

成功执行后,它将显示以下消息。

MySQL DELETE JOIN

现在,运行以下查询以验证行是否已成功删除。

您可以看到没有手机号码的客户的行已被删除。

MySQL DELETE JOIN
下一个主题MySQL Update Join