DELETE查询是数据操作语言的一部分,用于从表中删除行。在本节中,无涯教程将描述如何在DELETE查询中使用INNER JOIN或LEFT 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 关键字编写的表达式是与要删除的表中的行匹配的条件。
假设有两个表students和contacts,其中包含以下数据:
表:students
表:contacts
执行以下查询以了解使用内部联接删除联接。该语句删除两个表中具有相同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 所在的行已删除。
无涯教程已经通过 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
表:customers
执行以下语句,删除没有手机(cellphone)号码的客户:
DELETE customers FROM customers LEFT JOIN contacts ON customers.customer_id = contacts.contact_id WHERE cellphone IS NULL;
成功执行后,它将给出以下消息:
现在,运行以下查询以验证成功删除的行。
mysql> SELECT * FROM customers;
您可以看到删除了客户没有手机号的行。
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)