MySQL 删除连接
删除查询是数据操作语言的子部分,用于从表中删除行。如何在MySQL中删除连接是面试中非常流行的问题。在MySQL中使用删除连接语句并不简单。在本节中,我们将描述如何使用INNER JOIN或LEFT JOIN在DELETE查询中删除多个表中的记录。
使用INNER JOIN删除连接
Inner Join查询可与Delete查询一起使用,以删除满足指定条件的一个表中的行和来自另一个表的匹配行。
语法
以下是使用内部连接从多个表中删除行的语法。
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关键字之间。如果我们从中省略任何一个表名,那么删除语句只会从单个表中删除行。使用 ON 关键字写的表达式是匹配要删除的表中的行的条件。
示例
假设我们有两个包含以下数据的表 students 和 contacts :
Table: students
表格:联系人
执行以下查询以了解Inner Join的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 的行。
删除与LEFT JOIN连接的数据
我们已经学过了使用SELECT语句的LEFT JOIN子句,它返回了左(第一个)表中的所有行以及另一个表中匹配或不匹配的行。同样地,我们也可以使用LEFT JOIN子句与DELETE关键字一起从左(第一个)表中删除没有与右(第二个)表匹配的行。
以下查询更清楚地解释了如何使用DELETE语句和LEFT JOIN删除在 Table2 中没有匹配行的 Table1 中的行:
DELETE Table1 FROM Table1
LEFT JOIN Table2 ON Table1.key = Table2.key
WHERE Table2.key IS NULL;
在上面的查询中,请注意我们只使用了Table1和DELETE关键字,而没有像INNER JOIN语句中那样同时使用两者。
示例
让我们在一个数据库中创建一个名为” 联系人 “和” 顾客 “的表,并包含以下数据:
表:联系人
表:customers
执行以下语句以删除没有 手机号码 的客户:
DELETE customers FROM customers
LEFT JOIN contacts ON customers.customer_id = contacts.contact_id
WHERE cellphone IS NULL;
在成功执行后,它将显示以下消息:
现在,运行以下查询以验证删除行的成功。
mysql> SELECT * FROM customers;
您可以看到被删除的是那些客户没有手机号的行。