SQLite - 更新查詢
你好啊,未來的數據庫大師!今天,我們將要深入SQLite的奇妙世界,並學習其最強大的魔法之一——UPDATE查詢。想像你是一名圖書管理員,需要更改一些書卡上的資訊。這正是UPDATE查詢在我們數據庫中所做的!
什麼是UPDATE查詢?
UPDATE查詢就像一根魔法棒,讓我們能夠修改數據庫表中已存在的記錄。當你需要更改已存儲在數據庫中的數據時,它非常有用。
我們為什麼需要UPDATE查詢?
想像你正在管理一家書店的數據庫。有一天,你發現一本書的價格變了。你可以簡單地更新現有記錄的價格,而不是刪除舊記錄再創建一個新記錄。這就是UPDATE查詢派上用場的地方!
語法
現在,讓我們來看看UPDATE查詢的魔法……我是說,語法:
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
讓我們來分解這個語法:
-
UPDATE table_name
:在這裡,你指定你想更新的表。 -
SET column1 = value1, column2 = value2, ...
:在這裡,你列出你想更改的列和它們的新值。 -
WHERE condition
:這是可選的,但非常重要。它指定哪些行應該被更新。如果你省略這個,表中所有的行都會被更新!
範例
範例 1:更新單一列
我們從一個簡單的範例開始。想像我們有一個名為books
的表,其中有id
、title
、author
和price
列。我們想要更新一本書的價格。
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