程序员社区

MySQL系列教程 --- 77、MySQL 中的 删除连接

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

使用内部连接删除连接

内部联接查询可与删除查询一起使用,用于从一个表中删除行,并从另一个表中删除满足指定条件的匹配行。

句法

以下是可用于使用Inner Join从多个表中删除行的语法。

DELETE target table   
FROM    table1    
INNER JOIN table2  
ON table1.joining_column= table2.joining_column  
WHERE   condition  

这里,目标是一个表名,我们希望通过匹配指定条件从中删除行。假设要删除表T1T2student_id = 2 的行,则可以写成如下语句:

DELETE T1, T2    
FROM    T1    
INNER JOIN T2    
ON T1.student_id=T2.student.id    
WHERE   T1.student_id=2;  

在上面的语法中,目标表(T1 和 T2)写在 DELETE 和 FROM 关键字之间。如果我们从那里省略任何表名,那么删除语句只会从单个表中删除行。用ON关键字编写的表达式是与您要删除的表中的行匹配的条件。

例子

假设我们有两个包含以下数据的表studentscontacts

Table: students

file

Table: contacts

file

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

DELETE students, contacts FROM students  
INNER JOIN contacts ON students.student_id=contacts.college_id   
WHERE students.student_id = 4;  

执行成功后,会提示如下信息:

file

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

mysql> SELECT * FROM students;  
mysql> SELECT * FROM contacts;  

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

file

file

.

使用左连接删除连接

我们已经学习了带有SELECT 语句的 LEFT JOIN 子句,该语句返回左(第一个)表中的所有行以及另一个表中匹配或不匹配的行。类似地,我们也可以使用带有 DELETE 关键字的 LEFT JOIN 子句从左(第一个)表中删除与右(第二个)表中没有匹配行的行。

下面的查询解释得更清楚,其中DELETE语句使用LEFT JOIN从删除行的表1是不具有匹配的行表2

DELETE Table1 FROM Table1  
LEFT JOIN Table2 ON Table1.key = Table2.key   
WHERE Table2.key IS NULL;  

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

例子

让我们在包含以下数据的数据库中创建一个表“ contacts ”和“ customers ”:

Table: contacts

file

Table: customers

file

执行以下语句,删除没有手机号码的客户:

DELETE customers FROM customers  
LEFT JOIN contacts ON customers.customer_id = contacts.contact_id   
WHERE cellphone IS NULL;  

执行成功后,会提示如下信息:

file

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

mysql> SELECT * FROM customers;  

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

file

赞(0) 打赏
未经允许不得转载:IDEA激活码 » MySQL系列教程 --- 77、MySQL 中的 删除连接

一个分享Java & Python知识的社区