歡迎來到 SQL 的世界!
你有沒有想過 Spotify 是如何記住你的播放清單,或者學校是如何管理成千上萬名學生的資料的呢?答案就是使用資料庫 (Database)!在本章中,我們將學習 SQL (結構化查詢語言),這是一種用來與資料庫「溝通」的專門語言。如果初看之下覺得像程式碼,別擔心,它其實和英語非常相似!
3.7.1 關聯式資料庫:全貌概覽
資料庫簡而言之就是有組織的資料集合。而關聯式資料庫 (Relational Database) 是一種將資料存放在多個相互連結的資料表 (Table) 中的資料庫類型。
資料如何組織?
將資料庫表想像成體育俱樂部的試算表:
• 資料表 (Table):關於某個主題的完整資料集合(例如:「學生」表)。
• 記錄 (Record):表中的一行。它包含關於某個特定項目的所有資訊(例如:關於某位學生的所有詳情)。
• 欄位 (Field):表中的一列。它儲存某個特定類型的資訊(例如:「出生日期」或「姓氏」)。
• 資料類型 (Data Type):每個欄位都有一個類型,例如 Integer (整數)、Real (實數/小數) 或 String (文字)。這能告訴電腦預期接收什麼類型的資料。
成功的「鍵值」
為了保持一切井井有條,我們使用稱為「鍵值 (Keys)」的特殊欄位:
• 主鍵 (Primary Key):一個用來識別每條記錄的唯一欄位。就像你的指紋或學生編號一樣,兩條記錄不能擁有相同的主鍵。
• 外鍵 (Foreign Key):這是一個在某個資料表中連結到另一個資料表主鍵的欄位。這就是我們如何「連接」不同資料表的方法!
為什麼要使用關聯式資料庫?
如果我們把所有東西都放在同一個巨大的資料表中,最後會不斷重複輸入相同的內容。這會導致關聯式資料庫要解決的兩個重大問題:
1. 資料冗餘 (Data Redundancy):指相同的資料被儲存超過一次。關聯式資料庫透過將資料拆分為獨立的資料表來防止這種情況。
2. 資料不一致 (Data Inconsistency):如果你將某人的地址寫在五個不同的地方,而他們搬家了,你可能會忘記更新其中一個。透過使用連結的資料表,你只需要修改一次,就能確保資料「一致」。
快速複習:
• 資料表擁有記錄(行)和欄位(列)。
• 主鍵是唯一的識別碼。
• 外鍵用來將資料表連結在一起。
關鍵點:關聯式資料庫利用連結的資料表來節省空間(減少冗餘)並防止錯誤(資料不一致)。
3.7.2 結構化查詢語言 (SQL)
既然我們知道資料是如何儲存的,那麼該如何將它們提取出來呢?我們使用 SQL。
檢索資料 (SELECT 語句)
當你想搜尋資訊時,你會對資料庫進行「查詢」。用這個方便的記憶口訣來記住順序:Silly Frogs Watch Oranges! (SELECT, FROM, WHERE, ORDER BY)
• SELECT:你想查看哪些欄位(列)?
• FROM:你要查看哪個資料表?
• WHERE:搜尋條件是什麼?(就像一個篩選器)。
• ORDER BY:你想排序嗎?使用 ASC 進行 A-Z 排序,或 DESC 進行 Z-A 排序。
查詢範例:
想像一個名為 Students 的資料表。我們想找出 11 年級學生的名字,並按名字排序。
SELECT FirstName, Surname
FROM Students
WHERE YearGroup = 11
ORDER BY Surname ASC
你知道嗎? 在考試中,你可能會看到星號 (*)。在 SQL 中,SELECT * 的意思是「選取所有項目」。這是一個非常實用的捷徑!
修改資料
有時我們需要新增、修改或刪除資料。以下是我們的做法:
1. 新增資料 (INSERT)
當有新學生加入學校時,我們使用 INSERT INTO。
INSERT INTO Students (StudentID, FirstName, Surname)
VALUES (105, 'Alex', 'Smith')
2. 修改現有資料 (UPDATE)
如果 Alex Smith 改了姓氏,我們使用 UPDATE。
UPDATE Students
SET Surname = 'Jones'
WHERE StudentID = 105
3. 移除資料 (DELETE)
如果有學生離校,我們使用 DELETE。
DELETE FROM Students
WHERE StudentID = 105
警告! 在使用 UPDATE 和 DELETE 時,請務必小心 WHERE 子句。如果你忘記寫它,你可能會不小心修改或刪除資料庫中的「每一個人」!天啊!
處理兩個資料表
在 AQA 考試中,你可能需要同時從兩個資料表中提取資料。這時你需要確保 WHERE 子句將一個資料表的主鍵與另一個資料表的外鍵連結起來。
SELECT Students.FirstName, Classes.ClassName
FROM Students, Classes
WHERE Students.ClassID = Classes.ClassID
快速複習:
• SELECT 用於尋找資料。
• INSERT 用於新增資料。
• UPDATE 用於修改資料。
• DELETE 用於移除資料。
• WHERE 是讓查詢更精確的篩選器。
關鍵點:SQL 是一種邏輯語言。只要記住 SELECT, FROM, WHERE,你就已經掌握 90% 了!試著練習手寫這些指令,因為這就是考試時的要求。