SQL - DELETE查询:初学者的友好指南

你好,有抱负的SQL爱好者们!今天,我们将深入SQL DELETE查询的世界。别担心如果你是编程新手——我会一步步引导你,就像我多年来教导无数学生一样。所以,拿起一杯咖啡(或者茶,如果你喜欢的话),让我们一起开始吧!

SQL - Delete Query

SQL DELETE语句

想象一下你在整理你的数字相册。有时,你想删除某些照片,对吧?这正是SQL中的DELETE语句所做的——它帮助我们删除数据库表中的不需要的数据。

以下是DELETE语句的基本语法:

DELETE FROM table_name
WHERE condition;

让我们分解一下:

  • DELETE FROM:这告诉SQL我们想从特定的表中删除某些东西。
  • table_name:用你的表名替换这个。
  • WHERE:这是可选的,但很重要。它指定了要删除哪些行。
  • condition:这里是你设置删除条件的地方。

示例1:删除单行

假设我们有一个名为students的表,我们想删除名为John Doe的学生:

DELETE FROM students
WHERE name = 'John Doe';

这个查询将删除名称正好是'John Doe'的行。不过要小心!如果有多个John Doe,他们都会被删除。

示例2:基于数字条件删除

现在,让我们删除所有年龄超过25岁的学生:

DELETE FROM students
WHERE age > 25;

这将删除所有年龄大于25岁的行。就像是告诉数据库:“嘿,删除任何足够大到可以不用额外费用租车的人!”

删除多行

有时,你可能想删除满足某些特定条件的多行。让我们看几个示例。

示例3:基于多个条件删除行

假设我们想删除所有年龄超过30岁且GPA低于2.5的学生:

DELETE FROM students
WHERE age > 30 AND gpa < 2.5;

这个查询通过AND结合了两个条件。就像是说:“删除那些既超过30岁又学业成绩不佳的学生。”

示例4:基于值列表删除行

如果我们想删除来自特定城市列表的学生呢?我们可以使用IN操作符:

DELETE FROM students
WHERE city IN ('New York', 'Los Angeles', 'Chicago');

这个查询将删除来自纽约、洛杉矶或芝加哥的所有学生。就像是有一个VIP删除名单!

删除表中的所有记录

有时,你可能想清空整个表。就像决定清空你的整个衣柜以重新开始一样。以下是如何操作:

DELETE FROM table_name;

例如,删除我们学生表中的所有记录:

DELETE FROM students;

⚠️ 警告:使用这个命令时要极其小心!这就像是使用火焰喷射器来清洁房间——有效,但如果使用不当可能会带来灾难性的后果。

在多个表中删除记录

现在,让我们提升一下难度。有时,你需要一次从多个相关表中删除记录。这有点复杂,但别担心——我会一步步带你完成。

示例5:使用JOIN从多个表中删除

假设我们有两个表:studentsenrollments。我们想删除所有未支付费用的学生的报名记录和学生记录:

DELETE students, enrollments
FROM students
JOIN enrollments ON students.id = enrollments.student_id
WHERE students.fees_paid = 0;

这个查询做了几件事:

  1. 它连接了studentsenrollments表。
  2. 它查找未支付费用的学生。
  3. 它删除两个表中匹配的记录。

这就像是清理你的联系人列表,同时从所有群聊中删除这些联系人!

示例6:使用子查询删除

有时,你可能需要基于另一个表中的数据删除,而不实际连接它们。以下是一个示例:

DELETE FROM enrollments
WHERE student_id IN (
SELECT id
FROM students
WHERE graduation_year < 2020
);

这个查询删除了所有毕业年份早于2020年的学生的报名记录。就像是说:“移除所有已经搬走的人的邀请。”

DELETE方法总结

以下是我们涵盖的DELETE方法的快速参考表:

方法 描述 示例
基本DELETE 基于条件删除行 DELETE FROM students WHERE name = 'John Doe';
带有多个条件的DELETE 删除满足多个条件的行 DELETE FROM students WHERE age > 30 AND gpa < 2.5;
带有IN子句的DELETE 基于值列表删除行 DELETE FROM students WHERE city IN ('New York', 'Los Angeles', 'Chicago');
删除所有记录 从表中删除所有行 DELETE FROM students;
带有JOIN的DELETE 从多个表中删除相关记录 DELETE students, enrollments FROM students JOIN enrollments ON students.id = enrollments.student_id WHERE students.fees_paid = 0;
带有子查询的DELETE 基于另一个查询的结果删除 DELETE FROM enrollments WHERE student_id IN (SELECT id FROM students WHERE graduation_year < 2020);

就这样!你刚刚学习了SQL DELETE查询的内外。记住,能力越大,责任越大。在运行DELETE查询之前,请务必仔细检查你的WHERE子句,如果可能,先用SELECT来预览你即将删除的内容。

练习这些查询,玩转它们,很快你就能像专业人士一样删除数据!只是记住——在现实世界中,通常最好存档数据而不是永久删除。祝查询愉快,愿你的数据库始终保持整洁有序!

Credits: Image by storyset