SQL - DELETE查询:初学者的友好指南
你好,有抱负的SQL爱好者们!今天,我们将深入SQL DELETE查询的世界。别担心如果你是编程新手——我会一步步引导你,就像我多年来教导无数学生一样。所以,拿起一杯咖啡(或者茶,如果你喜欢的话),让我们一起开始吧!
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从多个表中删除
假设我们有两个表:students
和enrollments
。我们想删除所有未支付费用的学生的报名记录和学生记录:
DELETE students, enrollments
FROM students
JOIN enrollments ON students.id = enrollments.student_id
WHERE students.fees_paid = 0;
这个查询做了几件事:
- 它连接了
students
和enrollments
表。 - 它查找未支付费用的学生。
- 它删除两个表中匹配的记录。
这就像是清理你的联系人列表,同时从所有群聊中删除这些联系人!
示例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