MySQL - Delete Join

MySQL - Delete Join 首页 / MySQL入门教程 / MySQL - Delete Join

DELETE查询是数据操作语言的一部分,用于从表中删除行。在本节中,无涯教程将描述如何在DELETE查询中使用INNER JOIN或LEFT JOIN从多个表中删除记录。

INNER JOIN删除联接

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

以下是可使用内部联接从多个表中删除行的语法。

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

在这里,目标是一个表名,无涯教程要通过匹配指定条件从中删除行。假设您要从表 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;

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

假设有两个表studentscontacts,其中包含以下数据:

表:students

MySQL DELETE JOIN

表:contacts

MySQL DELETE JOIN

执行以下查询以了解使用内部联接删除联接。该语句删除两个表中具有相同ID的行。

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

成功执行后,它将给出以下消息:

MySQL DELETE JOIN

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

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

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

MySQL DELETE JOINMySQL DELETE JOIN

LEFT JOIN 删除联接

无涯教程已经通过 SELECT语句学习了LEFT JOIN子句,该子句返回左(第一个)表中的所有行以及另一个表中匹配或不匹配的行。类似地,还可以将LEFT JOIN子句与DELETE关键字一起使用,以从左表中删除行,而该表中没有与右表中的行匹配的行。

以下查询更清楚地说明了DELETE语句使用LEFT JOIN从 Table1 中删除在 Table2 中没有匹配行的行的情况:

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

在上面的查询中,请注意,无涯教程将仅将Table1与DELETE关键字一起使用,而不是像在INNER JOIN语句中一样。

示例

在包含以下数据的数据库中创建表"contacts"和" customers":

表:contacts

MySQL DELETE JOIN

表:customers

MySQL DELETE JOIN

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

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

成功执行后,它将给出以下消息:

MySQL DELETE JOIN

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

mysql> SELECT * FROM customers;

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

MySQL DELETE JOIN

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

SQL必知必会 -〔陈旸〕

Swift核心技术与实战 -〔张杰〕

Electron开发实战 -〔邓耀龙〕

检索技术核心20讲 -〔陈东〕

操作系统实战45讲 -〔彭东〕

Web 3.0入局攻略 -〔郭大治〕

Serverless进阶实战课 -〔静远〕

超级访谈:对话毕玄 -〔毕玄〕

手把手带你写一个MiniSpring -〔郭屹〕

好记忆不如烂笔头。留下您的足迹吧 :)