/tutor-prep-s6-ict-database-sql/
/tutor-prep-s6-ict-database-sql/
一般查詢: info@TutorZone.com.hk
辦公時間: 星期一至六 - 上午 9 時至下午 6 時
WhatsApp 星期一至日 - 24 小時
人手接聽: +852 6828 1809
即時客服: +852 9061 3106

DSE ICT|數據庫與 SQL 備課指引(導師用)|主鍵外鍵、SELECT 與正規化

DSE ICT|數據庫與 SQL 備課指引(導師用)|主鍵外鍵、SELECT 與正規化

  • 2026-11-01

學生背得出「主鍵唯一」,但寫 SELECT 時會漏 WHERE、把 COUNT 寫成 COUNT(*),JOIN 更加直接放棄。這一堂把查詢拆成四個零件,寫錯時知道是哪一個零件出事。

本堂目標 學生能夠:① 指出主鍵與外鍵並解釋參照完整性;② 由需求寫出 SELECT … FROM … WHERE … ORDER BY 查詢;③ 用 COUNT、AVG、GROUP BY 做統計,並用 JOIN 由兩張表合成一張結果表。

01 先備知識(開課前 3 分鐘快檢)

以下任何一項未過關,本堂就會卡住,先補該項:

技能 快檢題 過關標準
表格讀法 一張表的欄叫甚麼 欄位(field)
排序概念 ORDER BY 預設是升序還是降序 升序 ASC
平均數 5 個分數的平均怎樣算 總和除以數量

02 課堂流程(60 分鐘)

時間 環節 導師做什麼 學生做什麼
0–10 分 表、記錄、欄位 關聯式數據庫的基本單位 講出三個名詞的分別
10–22 分 主鍵與外鍵 唯一、非空、指向另一張表的主鍵 指出兩張表的鍵
22–36 分 SELECT 四零件 SELECT、FROM、WHERE、ORDER BY 寫出篩選加排序
36–48 分 聚合與 GROUP BY COUNT、AVG、每組一行的意思 算出 4A 班 2 人
48–56 分 JOIN 與正規化 ON 條件配對、重複資料的危害 JOIN 後 5 行
56–60 分 離場檢查 三題收回即批 獨立完成

03 講解腳本(照著說就可以)

第一幕:主鍵與外鍵:先畫兩張表,再講規則

一張表由欄位(field)與記錄(record)組成。主鍵是能唯一識別一行的欄,所以不可以重複、不可以空白;外鍵是另一張表的主鍵,放在這張表用來表示「屬於哪一個」。
本堂用兩張表:Students(學號、姓名、班別、分數)共 5 筆記錄,Classes(班別、班主任)共 3 筆。Students 的主鍵是學號,班別是外鍵,指向 Classes 的主鍵班別。所以 Students 裡不可以出現 Classes 沒有的班別,這條規則叫參照完整性。

要學生講:如果把班主任姓名直接寫入 Students,會有甚麼問題(同一位老師重複寫多次,改一次要改好多行)。

第二幕:SELECT 四個零件:缺一件就錯一種

SELECT 決定輸出哪幾個欄,FROM 決定由哪張表拿,WHERE 決定只要哪些行,ORDER BY 決定排序。四件零件各有各錯,所以寫錯時先問「是篩選錯、還是排序錯」。
例:SELECT Name FROM Students WHERE ClassID = “4A” ORDER BY Name;結果是 2 行,Chan Tai Man 與 Lee Ka Yan,按姓名升序。
再加條件:WHERE Mark > 70 得 3 行;WHERE Mark > 70 AND ClassID = “4B” 得 1 行(Ng Yuk)。留意字串要用引號,數字不用。

要學生寫:找出 4B 班分數最高的一位(Wong Hoi 58 與 Ng Yuk 90,答案是 Ng Yuk)。

第三幕:聚合與 JOIN:由幾行變成一個數

COUNT 數行數、AVG 算平均、MAX 找最大,配合 GROUP BY 可以每組出一行。SELECT ClassID, COUNT(*) FROM Students GROUP BY ClassID;得 4A 2 人、4B 2 人、5A 1 人。
全班平均分 = (72 + 65 + 58 + 81 + 90) ÷ 5 = 73.2,最高分 90(Ng Yuk)。
JOIN 是把兩張表按外鍵對齊:SELECT Students.Name, Classes.Teacher FROM Students JOIN Classes ON Students.ClassID = Classes.ClassID;結果仍然是 5 行,但每行多了班主任,Ms Cheung 帶 2 人、Mr Lau 帶 2 人、Dr Yip 帶 1 人。

提醒:漏寫 ON 條件會變成笛卡兒積,5 行乘 3 行得 15 行,是中六最常見的失分位。

04 必教題型與步驟

題型 例子 步驟 答案
設計 為補習班設計兩張表 找唯一欄做主鍵、重複資料搬去另一張表 Students 加 Classes
查詢 列出 4A 班學生姓名,按分數由高到低 SELECT Name FROM Students WHERE ClassID = “4A” ORDER BY Mark DESC 2 行
聚合 每班人數與平均分 GROUP BY ClassID 配 COUNT 與 AVG 4A 2 人、4B 2 人、5A 1 人
解釋 為何要正規化 消除重複、避免更新異常 改一處不用改多處
合理性檢查(一定要教):查詢結果行數一定不可以超過表的總行數 5,多過就是漏了 ON 條件。COUNT(*) 的答案一定是整數,出現 73.2 就是把 COUNT 與 AVG 混淆。平均分應該在最低分 58 與最高分 90 之間,超出範圍就是加錯行。

05 獨立練習三題

題目 答案 想觀察什麼
4B 班人數 2 WHERE ClassID = “4B” 再 COUNT
全表平均分 73.2 AVG(Mark)
JOIN 後行數 5 一對多但每名學生只屬一班

06 學生常見錯誤與糾正句

錯誤 學生通常這樣寫 導師這樣說
漏寫 WHERE 就當已篩選 SELECT Name FROM Students 之後以為只有 4A 「WHERE 係篩選,冇佢就係全表。」
COUNT 與 AVG 混用 想數人數卻寫 AVG(*) 「COUNT 數行,AVG 算平均,兩個唔可以調轉。」
JOIN 漏 ON 條件 兩表相乘得 15 行 「冇 ON 就係笛卡兒積,行數會爆。」
把班主任姓名存入 Students 同一老師名重複多次 「重複資料一改就要改好多行,所以拆表。」

07 家課建議(直接指到練習卷題號)

08 離場檢查(最後 5 分鐘)

題目 答案 判定
4A 班人數 2 人 三題全對=可進正規化
JOIN 後應有幾行 5 行 答 15 就是漏 ON
全表平均分 73.2 錯兩題以上=回到第二幕

09 導師常問

主鍵可以用姓名嗎?

不理想。姓名會重複亦會改,通常用一個沒有意思的學號或編號做主鍵。

GROUP BY 之後還可以用 WHERE 嗎?

WHERE 在分組前篩選行,分組後要再篩選就用 HAVING,兩者時序不同。

正規化是不是越多層越好?

不是。拆到第三正規化通常夠用,拆得太散查詢要不斷 JOIN,讀取變慢。

立即免費搵導師導師登記 →

本頁為 TutorZone 導師備課指引,內容由 TutorZone 團隊編寫;題目與流程為原創,並非任何學校或出版社的教材。

招募導師及興趣班教練|學術、樂器、體育、藝術、STEM,免費登記,招生與配對交給平台。 了解詳情 →