PostgreSQL - DELETE 查詢:初學者指南

歡迎,有志於數據庫的熱心同好!今天,我們將進入 PostgreSQL 的世界,並探討其基本操作之一:DELETE 查詢。別擔心如果你之前從未寫過一行代碼——我將成為你這次旅程中的友好導師,一步步為你解釋一切。

PostgreSQL - Delete Query

DELETE 查詢是什麼?

在我們深入細節之前,讓我們了解一下 DELETE 查詢是關於什麼的。想像你有一本數字筆記本(這就是我們的數據庫),裡面充滿了信息。有時候,你可能想要擦除某些頁面或條目。这正是 PostgreSQL 中的 DELETE 查詢所做的——它從表中刪除特定的行。

DELETE 查詢的語法

現在,讓我們看看 DELETE 查詢的基本結構:

DELETE FROM table_name
WHERE condition;

讓我們分解一下:

  1. DELETE FROM:這是我們開始查詢的方式,告訴 PostgreSQL 我們想要刪除某物。
  2. table_name:這是你想要刪除數據的表的名稱。
  3. WHERE:這個子句是可選的,但非常重要。它指定了哪些行要刪除。
  4. condition:這裡是你定義哪些行應該被刪除的地方。

把它想像成給一個有用的機器人下指示:"嘿,機器人,從我的筆記本(表)中刪除昨天日期的條目。"

DELETE 查詢實際操作示例

示例 1:刪除所有行

讓我們從一個簡單的例子開始。假設我們有一個名為 old_records 的表,我們想要刪除其中的所有行。

DELETE FROM old_records;

這個查詢將從 old_records 表中移除所有行。請謹慎使用這個——這就像擦除你筆記本中的一切!

示例 2:刪除特定行

現在,讓我們說我們有一個 students 表,我們想要移除所有已畢業的學生:

DELETE FROM students
WHERE status = 'graduated';

這個查詢告訴 PostgreSQL 只刪除 status 列值為 'graduated' 的行。這就像在你的班級名單上勾掉所有已畢業的學生。

示例 3:根據多個條件刪除

讓我們來得複雜一些。想像我們有一個 orders 表,我們想要刪除所有已取消且超過 30 天的訂單:

DELETE FROM orders
WHERE status = 'cancelled' AND order_date < CURRENT_DATE - INTERVAL '30 days';

這個查詢結合了兩個條件:

  1. 訂單狀態必須是 'cancelled'
  2. 訂單日期必須超過 30 天前

這就像清理你上個月取消的舊披薩訂單!

示例 4:使用子查詢刪除

有時候,我們需要根據另一個表中的信息來刪除行。讓我們說我們想要刪除所有過去一年沒有購買的客戶的訂單:

DELETE FROM orders
WHERE customer_id IN (
SELECT customer_id
FROM customers
WHERE last_purchase_date < CURRENT_DATE - INTERVAL '1 year'
);

這個查詢使用子查詢來找出過去一年沒有購買的客戶,然後刪除這些客戶的所有訂單。這就像從你的訂單簿中刪除所有失去聯繫的客戶的記錄。

安全第一:使用事務

當使用 DELETE 查詢時,尤其是在重要的數據上,使用事務是一個好習慣。把事務想像成一個安全網——如果出了問題,你可以撤銷你的更改。

以下是如何使用事務:

BEGIN;
DELETE FROM students WHERE status = 'graduated';
-- 檢查一切是否正常
COMMIT;
-- 或者如果出了問題
-- ROLLBACK;

這樣,你可以在將更改永久化之前(COMMIT)或如果需要(ROLLBACK)撤銷它們。

常見 DELETE 方法

讓我們總結一些常見的 DELETE 方法:

方法 描述 示例
刪除所有行 從表中移除所有數據 DELETE FROM table_name;
根據條件刪除 刪除滿足特定標準的行 DELETE FROM table_name WHERE condition;
使用子查詢刪除 根據另一個查詢的數據刪除行 DELETE FROM table_name WHERE column IN (SELECT...);
使用 JOIN 刪除 根據連接表的數據刪除行 DELETE FROM table1 USING table2 WHERE table1.id = table2.id;
使用 RETURNING 刪除 刪除行並返回刪除的數據 DELETE FROM table_name RETURNING *;

結論

這就是我們的 PostgreSQL DELETE 查詢之旅,從簡單的刪除到更複雜的操作。記住,能力越大,責任越大——在運行 DELETE 查詢之前,一定要倍加檢查你的 WHERE 子句。

練習這些例子,玩轉你自己的數據,不久你將能夠像專家一樣刪除數據。只是別不小心刪掉了你的作業——我可不會接受 "PostgreSQL 吃了我的作業" 作為藉口!

快樂查詢,願你的數據庫永遠保持乾淨和良好維護!

Credits: Image by storyset