📚 IGCSE 電腦科學 (0478):學習筆記 - 資料庫 (單元 9)
歡迎來到資料庫的世界!別擔心,這不僅僅是指龐大的伺服器機房;重點在於如何讓資訊變得實用且有條理。你可以把資料庫想像成處理海量數據的終極數位檔案系統,就像 Amazon 上的所有產品細節,或是學校裡所有學生的紀錄一樣。
在本章中,我們將學習如何設計一個簡單的資料庫表格,定義其中的資料類型,最重要的是,學習如何使用一種強大的語言——SQL (結構化查詢語言),向資料庫提出精明的查詢,並精準擷取我們所需的資訊。
9.1 & 9.2 資料庫結構與資料類型
類比:資料庫就像電子試算表
理解簡單資料庫最容易的方法,就是把它想像成一個非常有條理的電子試算表(單一表格)。
試想你有一個班級名冊:
- 每一個欄位標題(例如姓名、年齡或成績)就是一個欄位 (Field)。
- 每一行(例如某位學生的所有資訊)就是一個紀錄 (Record)。
- 整個試算表就是一個表格 (Table)(這便組成了一個單表資料庫)。
1. 定義單表資料庫
當我們定義資料庫結構時,我們是在列出所需的欄位,並為填入其中的資料規劃規則。
資料庫的核心組成:
- 欄位 (Fields / Attributes): 這是為每個項目或個人所儲存的個別數據。
例子:學生編號 (StudentID)、學生姓名 (StudentName)、出生日期 (DateOfBirth)。 - 紀錄 (Records / Tuples): 單一項目的完整欄位集合。
例子:某位學生的整行數據。 - 驗證 (Validation): 設定規則以確保輸入的資料合理且準確。
例子:確保「年齡」欄位只能接受 5 到 18 之間的數字。
2. 建議合適的基本資料類型
每個欄位都必須定義一個資料類型 (Data Type)。這告訴資料庫應該預期什麼類型的資訊,有助於節省空間並確保資料完整性(正確性)。
以下是你需要掌握的基本資料類型:
| 資料類型 | 儲存內容 | 使用例子 |
|---|---|---|
| 整數 (Integer) | 整數(無小數點)。 | 年齡、物品數量、產品編號。 |
| 實數 (Real) | 包含小數部分的數值。 | 價格、身高、平均分數。 |
| 文字/字母數字 (Text / Alphanumeric) | 字母、數字或符號(包括空格)的任意組合。通常用於較長的條目。 | 姓名、地址、產品描述。 |
| 字元 (Character) | 單個字母、數字或符號。 | 性別 ('M' 或 'F')、等級 ('A', 'B', 'C')。 |
| 布林值 (Boolean) | 只能是 TRUE(真)或 FALSE(假)的邏輯值(有時儲存為 1 或 0,或「是」與「否」)。 | 是否已付款、是否為在讀學生。 |
| 日期/時間 (Date/Time) | 以特定格式儲存的日期或時間。 | 註冊日期、訂單時間。 |
快速複習: 選擇正確的資料類型至關重要。如果你嘗試把文字 "Expensive" 放入一個實數 (Real) 欄位,資料庫會拒絕你的輸入!
9.3 主鍵 (Primary Key)
想像一下,學校裡剛好有兩位學生都叫 *Maria Khan*。學校的電腦系統該如何分辨哪位是哪位呢?
這時候就需要使用主鍵 (Primary Key)!
主鍵的用途
主鍵是一個欄位(有時是多個欄位的組合),用來唯一標識表格中的每一筆紀錄。
- 唯一性 (Uniqueness): 沒有兩筆紀錄可以擁有相同的主鍵值。
- 非空性 (Not Null): 主鍵欄位不能留空。
類比:你的護照號碼或學生證號碼就是現實世界中的主鍵——即便你和別人撞名,該號碼對你來說也是獨一無二的。
識別合適的主鍵
當題目要求你建議一個主鍵時,請尋找那些保證唯一且對每筆紀錄都必須存在的欄位。
良好的主鍵候選:
- 編號 (ID Numbers)(*客戶編號、訂單編號、ISBN*)。這些通常由系統自動產生,旨在保證唯一。
不適合的主鍵候選(為什麼?):
- 姓名: 不唯一(兩個人可以有相同的名字)。
- 地址: 不唯一(兩個人可以住在同一棟房子)且內容太長。
- 年齡: 絕對不唯一。
重點總結: 主鍵就是紀錄的「數位指紋」。它必須是唯一且必須存在的。
9.4 結構化查詢語言 (SQL)
SQL 是我們與關聯式資料庫進行通訊和操作的語言。你需要學會如何閱讀、理解並編寫基本的單表 SQL 查詢。
別擔心複雜的程式設計,SQL 使用的是簡單且清晰的英文關鍵字!
SQL 查詢的基本結構
幾乎每個查詢都遵循這個結構:
SELECT [我想看到什麼資料?]
FROM [資料儲存在哪個表格?]
WHERE [紀錄必須符合什麼條件?]
1. 擷取資料 (SELECT 和 FROM)
SELECT 和 FROM 子句是每個查詢的必要部分。
- SELECT *:意為「選取所有欄位」。
- SELECT Field1, Field2:意為「僅選取這些特定欄位」。
- FROM TableName:指定包含資料的表格。
例子:顯示 'Students' 表格中的所有資料。
SELECT *
FROM Students;
例子:僅顯示 'Students' 表格中的 Name 和 Age 欄位。
SELECT Name, Age
FROM Students;
2. 過濾紀錄 (WHERE)
WHERE 子句用於根據特定準則或條件來過濾(限制)返回的紀錄。
WHERE 中使用的關係運算子:
- = (等於)
- > (大於)
- < (小於)
- >= (大於或等於)
- <= (小於或等於)
- <> (不等於)
例子:找出所有 16 歲的學生。
SELECT *
FROM Students
WHERE Age = 16;
例子:找出所有價格大於 50.00 的產品。(注意:文字必須用單引號 ' ' 包起來)。
SELECT ProductName
FROM Products
WHERE Price > 50.00;
3. 結合條件 (AND, OR)
我們使用 AND 或 OR 在 WHERE 子句中連結多個條件。
- AND: 必須*同時*滿足兩個條件,紀錄才會被選取。
- OR: 只要滿足其中*至少一個*條件,紀錄就會被選取。
例子 (AND):找出 16 歲且住在倫敦 (London) 的學生。
SELECT Name
FROM Students
WHERE Age = 16 AND City = 'London';
例子 (OR):找出 15 歲或 17 歲的學生。
SELECT Name
FROM Students
WHERE Age = 15 OR Age = 17;
4. 排序結果 (ORDER BY)
ORDER BY 子句根據一個或多個欄位對輸出進行排序。
- ASC (升序):從 A 到 Z 或 1 到 10(預設排序方式)。
- DESC (降序):從 Z 到 A 或 10 到 1。
例子:列出所有學生的姓名,按字母順序 (A-Z) 排列。
SELECT Name
FROM Students
ORDER BY Name ASC;
例子:列出產品,按價格從高到低排列。
SELECT ProductName, Price
FROM Products
ORDER BY Price DESC;
5. 彙總函數 (SUM, COUNT)
這些函數對一組紀錄進行計算,並返回單一的總結值。
- COUNT(Field) 或 COUNT(*):計算符合條件的紀錄數量。
- SUM(Field):計算符合條件的數值欄位的總和。
例子 (COUNT):Students 表格裡有多少筆紀錄?
SELECT COUNT(*)
FROM Students;
例子 (SUM):所有庫存物品的總成本是多少?
SELECT SUM(StockValue)
FROM Products;
★ 識別輸出(關鍵考試技能)
在考試中,你必須能看懂資料庫表格和 SQL 查詢,並準確描述該查詢會輸出哪些紀錄和欄位。
步驟如下:
- 檢查 FROM 子句: 你在看哪個表格?(通常會提供)。
- 套用 WHERE 子句: 一行一行檢查表格,哪些紀錄符合條件?(剔除其他不符的紀錄)。
- 套用 SELECT 子句: 在剩下的紀錄中,題目要求顯示哪些欄位?(忽略其他欄位)。
- 套用 ORDER BY 子句: 如果有此子句,將最終輸出的列表按要求重新排序 (ASC 或 DESC)。
你知道嗎? Google、Facebook 以及幾乎所有大型數位企業,都極度依賴複雜的資料庫和快速的 SQL 查詢來管理你的數據!
💬 重點回顧:資料庫與 SQL
資料庫將數據組織成欄位和紀錄,並透過驗證和主鍵確保資料品質。
SQL 是資料擷取的工具。請記住核心結構:
SELECT... FROM... WHERE... ORDER BY...
精通這些關鍵字,你就能在龐大的數據集中高效地找到所需資訊。