歡迎來到 SQL 的世界!
你有沒有想過 Spotify 是如何記住你最愛的歌曲,或是像《要塞英雄》(Fortnite) 這樣的遊戲如何追蹤你的造型和 V-Bucks?這一切都發生在數據庫 (Database) 之中。為了與這些數據庫溝通,我們使用一種名為 SQL(讀作 'sequel' 或 S-Q-L)的專用語言,它的全稱是結構化查詢語言 (Structured Query Language)。
在本章中,我們將學習如何向數據庫提問、加入新資料,甚至修改或刪除數據。如果起初看起來有點複雜也不用擔心——SQL 的語法其實和英文非常相似!
1. 理解關聯式數據庫
在編寫程式碼之前,我們需要先了解我們在處理什麼。關聯式數據庫 (Relational Database) 是一種將數據存儲在互相關聯的資料表 (Tables) 中的方法。
數據庫關鍵術語:
• 資料表 (Table): 以行和列組織的數據集合(就像試算表一樣)。
• 記錄 (Record): 資料表中的單一橫列。它代表一件「事物」(例如:一名學生或一件商品)。
• 欄位 (Field): 資料表中的單一直行。它代表一種「屬性」(例如:姓氏或價格)。
• 數據類型 (Data Type): 每個欄位都有一個類型,例如 Integer(整數)或 String(文字)。
• 主鍵 (Primary Key): 一個用來識別每條記錄的唯一欄位(就像你的學生編號)。沒有兩條記錄可以使用同一個主鍵!
• 外鍵 (Foreign Key): 一個來自其他資料表的主鍵,出現在當前資料表中以將兩者連結起來。
現實生活例子: 想像一下你學校的數據庫。一張資料表存儲學生(姓名、出生日期、學生編號)。另一張資料表存儲課程(課程編號、科目、老師)。透過將學生編號放入課程資料表中,我們就將學生與他們的課堂「連結」起來了。這個連結就是外鍵。
你知道嗎? 使用關聯式數據庫有助於消除數據冗餘 (Data Redundancy)(重複存儲相同的資訊)和數據不一致 (Data Inconsistency)(同一人擁有兩個不同的地址)。它能讓一切保持井然有序!
快速複習:
- 資料表 (Tables) = 整個資料集合。
- 記錄 (Records) = 水平方向的列。
- 欄位 (Fields) = 垂直方向的行。
- 主鍵 (Primary Key) = 唯一的識別碼。
2. 檢索數據:SELECT 語句
要從數據庫中提取數據,我們使用 SELECT 指令。這被稱為「查詢 (Query)」。
基本結構:
SELECT (你想查詢哪些欄位?)
FROM (它在哪個資料表?)
WHERE (搜尋條件是什麼?)
ORDER BY (應該如何排序結果?)
記憶口訣:Silly Frogs Wear Orange
(SELECT, FROM, WHERE, ORDER BY)
逐步範例:
想像一個名為 Games 的資料表,欄位有:Title(標題)、Genre(類型)、Price(價格)、Rating(評分)。
如果我們想查看所有價格低於 £20 的遊戲標題,我們會這樣寫:
SELECT Title
FROM Games
WHERE Price < 20;
排序結果:
在結尾使用 ORDER BY。你可以使用 ASC 進行升序排序(A-Z, 1-10),或使用 DESC 進行降序排序(Z-A, 10-1)。
SELECT Title, Price
FROM Games
ORDER BY Price DESC;
處理兩個資料表:
在考試中,你可能需要從兩個資料表獲取數據。我們透過在 WHERE 子句中匹配其中一個表的主鍵與另一個表的外鍵來做到這一點。
範例:SELECT Students.Name, Grades.Score
FROM Students, Grades
WHERE Students.StudentID = Grades.StudentID;
關鍵重點: SELECT 選取欄位,FROM 選取資料表,而 WHERE 用來篩選列!
3. 加入新數據:INSERT INTO
當你註冊新的社交媒體帳戶時,應用程式會使用 INSERT 指令將你加入到他們的數據庫中。
寫法:
INSERT INTO table_name (column1, column2...)
VALUES (value1, value2...);
範例: 將新遊戲加入清單。
INSERT INTO Games (Title, Genre, Price)
VALUES ('Super Space Explorer', 'Sci-Fi', 15.99);
常見錯誤: 請確保數值 (Values) 的順序與你列出的欄位順序完全相同!如果 Title 排在第一個,那麼遊戲名稱在數值清單中也必須排在第一個。此外,請記住 String(文字)兩側需要加上「單引號」,但 Integer(整數)和 Real(實數)則不需要。
4. 修改與刪除數據
有時數據會發生變化(例如遊戲打折),或者需要被移除(例如用戶刪除帳戶)。
更新數據
我們使用 UPDATE 來修改現有的記錄。
結構:
UPDATE table_name
SET column = new_value
WHERE condition;
範例:將 'Battle Arena' 的價格改為 £10。
UPDATE Games
SET Price = 10
WHERE Title = 'Battle Arena';
刪除數據
我們使用 DELETE 來徹底刪除一條記錄。
結構:
DELETE FROM table_name
WHERE condition;
範例:移除不再販售的遊戲。
DELETE FROM Games
WHERE Title = 'Old Game 2010';
危險區域! 在使用 UPDATE 或 DELETE 時,務必記得加上 WHERE 子句。如果你忘了它,你可能會不小心更新資料表中的每一行,或者刪除所有東西!想像一下,如果不小心把店裡所有遊戲的價格都設為 £0,那該怎麼辦?
快速複習:
- INSERT = 建立新數據。
- UPDATE = 修改現有數據。
- DELETE = 移除數據。
總結:你的 SQL 工具箱
你現在已經掌握了管理數據庫的工具!記住這四個指令,你就會成為 SQL 專家:
1. SELECT: 查詢並顯示數據。
2. INSERT: 加入新記錄。
3. UPDATE: 編輯記錄。
4. DELETE: 移除記錄。
透過為「學生」或「音樂」資料表編寫自己的查詢指令來多加練習吧。寫得越多,你就會覺得越自然。你一定沒問題的!