MySQL Delete Join删除连接
DELETE 查询是用于从表中删除行的数据操作语言的子部分。MySQL中如何删除join是面试中非常热门的问题。在 MySQL 中使用 delete join 语句不是一个简单的过程。在本节中,我们将描述如何在 DELETE 查询中使用 INNER JOIN 或 LEFT JOIN 从多个表中删除记录。
一、MySQL Delete Join 语法
Inner Join 查询可与 Delete 查询一起使用,以从一个表中删除行,并从另一个表中删除满足指定条件的匹配行。
DELETE target table
FROM table1
INNER JOIN table2
ON table1.joining_column= table2.joining_column
WHERE condition
在这里,target是一个表名,我们希望通过匹配指定的条件从该表中删除行。假设要从表T1和T2中删除student_id = 2的行,则可以写成如下语句:
DELETE T1, T2
FROM T1
INNER JOIN T2
ON T1.student_id=T2.student.id
WHERE T1.student_id=2;
在上述语法中,target表(T1 和 T2)写在 DELETE 和 FROM 关键字之间。如果我们从那里省略任何表名,那么删除语句仅从单个表中删除行。用ON关键字编写的表达式是与要删除的表中的行匹配的条件。
二、MySQL Delete Join 示例
假设我们有两个表students和contacts,其中包含以下数据:
students表:
contacts表:
执行以下查询以了解Delete Join与内连接。此语句删除两个表中具有相同 id 的行。
DELETE students, contacts FROM students
INNER JOIN contacts ON students.student_id=contacts.college_id
WHERE students.student_id = 4;
执行成功后会提示如下信息:
现在,运行以下查询以验证成功删除的行。
mysql> SELECT * FROM students;
mysql> SELECT * FROM contacts;
可以看到student_id=4的行被删除了。
三、MySQL LEFT JOIN 和 Delete Join同时使用
我们已经学习了带有SELECT 语句的 LEFT JOIN 子句返回左(第一个)表中的所有行以及另一个表中匹配或不匹配的行。同样,我们也可以使用带有 DELETE 关键字的 LEFT JOIN 子句从左(第一)表中删除右(第二)表中没有匹配行的行。以下查询更清楚地解释了 DELETE 语句在哪里使用 LEFT JOIN 从Table1中删除在Table2中没有匹配行的行:
DELETE Table1 FROM Table1
LEFT JOIN Table2 ON Table1.key = Table2.key
WHERE Table2.key IS NULL;
在上面的SQL中,请注意我们将只使用带有 DELETE 关键字的 Table1,而不是像 INNER JOIN 语句中那样使用两者。
示例
让我们在包含以下数据的数据库中创建一个表“ contacts ”和“ customers ”:
contacts表:
customers表:
执行以下语句,删除没有手机号码的客户:
DELETE customers FROM customers
LEFT JOIN contacts ON customers.customer_id = contacts.contact_id
WHERE cellphone IS NULL;
执行成功后会提示如下信息:
现在,运行以下SQL以验证成功删除的行。
mysql> SELECT * FROM customers;
可以看到没有手机号的客户的行被删除了。
热门文章
优秀文章