/cn-tutor-prep-s6-ict-database-sql/
/cn-tutor-prep-s6-ict-database-sql/
简体版
2
一般查询: 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,免费登记,招生与配对交给平台。 了解详情 →