📚 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)

SELECTFROM 子句是每個查詢的必要部分。

  • 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)

我們使用 ANDOR 在 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 查詢,並準確描述該查詢會輸出哪些紀錄和欄位。

步驟如下:

  1. 檢查 FROM 子句: 你在看哪個表格?(通常會提供)。
  2. 套用 WHERE 子句: 一行一行檢查表格,哪些紀錄符合條件?(剔除其他不符的紀錄)。
  3. 套用 SELECT 子句: 在剩下的紀錄中,題目要求顯示哪些欄位?(忽略其他欄位)。
  4. 套用 ORDER BY 子句: 如果有此子句,將最終輸出的列表按要求重新排序 (ASC 或 DESC)。

你知道嗎? Google、Facebook 以及幾乎所有大型數位企業,都極度依賴複雜的資料庫和快速的 SQL 查詢來管理你的數據!

💬 重點回顧:資料庫與 SQL

資料庫將數據組織成欄位紀錄,並透過驗證主鍵確保資料品質。

SQL 是資料擷取的工具。請記住核心結構:

SELECT... FROM... WHERE... ORDER BY...

精通這些關鍵字,你就能在龐大的數據集中高效地找到所需資訊。