SQLite - 更新查詢

你好啊,未來的數據庫大師!今天,我們將要深入SQLite的奇妙世界,並學習其最強大的魔法之一——UPDATE查詢。想像你是一名圖書管理員,需要更改一些書卡上的資訊。這正是UPDATE查詢在我們數據庫中所做的!

SQLite - UPDATE Query

什麼是UPDATE查詢?

UPDATE查詢就像一根魔法棒,讓我們能夠修改數據庫表中已存在的記錄。當你需要更改已存儲在數據庫中的數據時,它非常有用。

我們為什麼需要UPDATE查詢?

想像你正在管理一家書店的數據庫。有一天,你發現一本書的價格變了。你可以簡單地更新現有記錄的價格,而不是刪除舊記錄再創建一個新記錄。這就是UPDATE查詢派上用場的地方!

語法

現在,讓我們來看看UPDATE查詢的魔法……我是說,語法:

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;

讓我們來分解這個語法:

  1. UPDATE table_name:在這裡,你指定你想更新的表。
  2. SET column1 = value1, column2 = value2, ...:在這裡,你列出你想更改的列和它們的新值。
  3. WHERE condition:這是可選的,但非常重要。它指定哪些行應該被更新。如果你省略這個,表中所有的行都會被更新!

範例

範例 1:更新單一列

我們從一個簡單的範例開始。想像我們有一個名為books的表,其中有idtitleauthorprice列。我們想要更新一本書的價格。

UPDATE books
SET price = 19.99
WHERE id = 1;

這個查詢會將id為1的書的價格更新為19.99。

範例 2:更新多列

現在,讓我們說我們想要更新一本書的價格和作者:

UPDATE books
SET price = 24.99, author = 'Jane Doe'
WHERE title = 'The Great Adventure';

這個查詢會將標題為'The Great Adventure'的書的價格更改為24.99,作者更改為'Jane Doe'。

範例 3:更新所有行

有時候,你可能想要更新表中的所有行。請謹慎使用這個,它就像對整個圖書館施法一樣!

UPDATE books
SET price = price * 1.1;

這個查詢會將所有書的價格增加10%。注意我們沒有使用WHERE子句,所以它會影響所有行。

範例 4:在更新中使用表達式

你還可以在你的UPDATE查詢中使用表達式。想像我們想要給所有昂貴的書打折:

UPDATE books
SET price = price * 0.9
WHERE price > 50;

這個查詢會將所有價格超過$50的書的價格減少10%。

範例 5:基於另一個表的更新

你甚至可以根據另一個表中的信息來更新數據。想像我們有一個sales表,並且我們想要更新我們books表中的popular列:

UPDATE books
SET popular = 1
WHERE id IN (SELECT book_id FROM sales GROUP BY book_id HAVING COUNT(*) > 100);

這個看似複雜的查詢會將那些銷售超過100次的書標記為熱門。

常見UPDATE方法

這裡是一個你可能會發現有用的常見UPDATE方法的表格:

方法 描述 範例
簡單更新 更新單一列 UPDATE books SET price = 19.99 WHERE id = 1;
多列更新 更新多列 UPDATE books SET price = 24.99, author = 'Jane Doe' WHERE id = 1;
更新所有行 更新表中的所有行 UPDATE books SET price = price * 1.1;
條件更新 更新滿足條件的行 UPDATE books SET price = price * 0.9 WHERE price > 50;
子查詢更新 基於子查詢的更新 UPDATE books SET popular = 1 WHERE id IN (SELECT book_id FROM sales GROUP BY book_id HAVING COUNT(*) > 100);

記住,年輕的魔法師,力量越大,責任越大。在施放UPDATE咒語之前,請一定倍加檢查你的WHERE子句。你可不會想意外地更改圖書館中所有的書,而只更新一本!

練習這些咒語……我是說,查詢,不久你將會成為數據庫魔法的掌控者。快樂編程,願你的數據庫總是保持在最新狀態!

Credits: Image by storyset