MySQL Delete 里面用查询

在MySQL中,删除数据是常见的操作之一。通常情况下,我们使用DELETE语句来删除满足特定条件的行。然而,在某些情况下,我们可能需要在DELETE语句中使用查询来确定要删除的行。

DELETE 语句基础

DELETE语句用于从MySQL表中删除行。它的基本语法如下:

DELETE FROM table_name
WHERE condition;

这里,table_name是要从中删除行的表的名称,condition是一个可选的条件,用于指定要删除的行。如果没有指定条件,将删除表中的所有行。

让我们考虑一个名为students的表,它包含学生的姓名和年龄。我们将使用以下示例数据来说明:

name age
Alice 20
Bob 22
Charlie 18
David 19
Eve 21

假设我们想删除年龄小于20的学生。我们可以使用以下DELETE语句来实现:

DELETE FROM students
WHERE age < 20;

这将删除David和Charlie这两行。现在让我们进一步探讨如何在DELETE语句中使用查询。

在DELETE语句中使用查询

有时候我们希望在DELETE语句中使用查询来确定要删除的行。这可以通过子查询来实现。子查询是一个嵌套在另一个查询中的查询语句。

假设我们有另一个名为courses的表,它包含学生的课程信息。我们将使用以下示例数据来说明:

student_name course_name
Alice Math
Alice Science
Bob Math
Charlie English
David Science
Eve Math

现在,假设我们想删除选修了Math课程的学生。我们可以使用以下DELETE语句来实现:

DELETE FROM students
WHERE name IN (SELECT student_name FROM courses WHERE course_name = 'Math');

这里,子查询(SELECT student_name FROM courses WHERE course_name = 'Math')返回了选修了Math课程的学生的姓名列表,然后使用IN运算符将其传递给DELETE语句的WHERE条件。

这将删除Alice和Bob这两行。

代码示例

下面是一个完整的代码示例,演示了如何在DELETE语句中使用查询来删除行:

-- 创建学生表
CREATE TABLE students (
  name VARCHAR(50),
  age INT
);

-- 插入示例数据
INSERT INTO students (name, age)
VALUES ('Alice', 20), ('Bob', 22), ('Charlie', 18), ('David', 19), ('Eve', 21);

-- 创建课程表
CREATE TABLE courses (
  student_name VARCHAR(50),
  course_name VARCHAR(50)
);

-- 插入示例数据
INSERT INTO courses (student_name, course_name)
VALUES ('Alice', 'Math'), ('Alice', 'Science'), ('Bob', 'Math'), ('Charlie', 'English'), ('David', 'Science'), ('Eve', 'Math');

-- 删除选修了Math课程的学生
DELETE FROM students
WHERE name IN (SELECT student_name FROM courses WHERE course_name = 'Math');

上述代码创建了两个表studentscourses,并插入了示例数据。然后,它使用DELETE语句删除了选修了Math课程的学生。

总结

在MySQL中,我们可以使用DELETE语句从表中删除行。有时候,我们可能需要在DELETE语句中使用查询来确定要删除的行。这可以通过使用子查询来实现。在DELETE语句的WHERE条件中,可以使用子查询返回的结果来确定要删除的行。通过灵活使用DELETE语句和查询,我们可以轻松删除满足特定条件的行。

pie
    title 删除学生的原因
    "成绩不合格" : 5
    "退学" : 2
    "其他原因" : 3
gantt
    dateFormat  YYYY-MM-DD
    title 删除学生的时间安排
    section 删除学生
    Alice :done,    desc1, 2022-01-01, 2022