MySQL 删除连接

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

假设我们想要根据指定条件删除表中的行,目标是一个来自计算机领域的表名。假设您想要从表 T1T2 中删除行,其中 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 关键字写的表达式是匹配要删除的表中的行的条件。

示例

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

Table: students

MySQL 删除连接

表格:联系人

MySQL 删除连接

执行以下查询以了解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 删除连接

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

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

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

MySQL 删除连接

删除与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语句中那样同时使用两者。

示例

让我们在一个数据库中创建一个名为” 联系人 “和” 顾客 “的表,并包含以下数据:

表:联系人

MySQL 删除连接

表:customers

MySQL 删除连接

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

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

在成功执行后,它将显示以下消息:

MySQL 删除连接

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

mysql> SELECT * FROM customers;

您可以看到被删除的是那些客户没有手机号的行。

MySQL 删除连接

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程