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