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