学科册 03 · 数据库 · 按考点组织(王珊《数据库系统概论》第 6 版)

数据库

按考点而不是按理论顺序组织:每个考点给出「考什么题型 → 解题步骤 / 套路 → 示例 → 易错点」,照着做就能拿分。 考点按教材的篇—章顺序排列,章末保留教材小节清单;需要系统讲解时可跳转到配套教学页。

当前进度:第 3 章 · SQL 连接查询 已讲:基本概念 / 关系代数 / 数据定义 / 单表查询 / 连接查询 未讲:嵌套与集合查询及以后 19 个考点 4 篇 18 章 写语句 / 计算 / 简答全覆盖 含 SQL 在线沙盒

考点速查表

按考试出现频率标注:高 = 大题常客,中 = 常规题,了解 = 概念题为主。点击考点名称可直接跳转。

进度频率考点常见题型所属章节
●中1 基本概念与三级模式简答 / 选择第 1 章
●中2 关系模型术语与完整性选择 / 简答第 2 章
●高3 关系代数运算计算题第 2 章
●中4 SQL 数据定义写语句第 3 章
●高5 SQL 单表查询写语句第 3 章
●高6 SQL 连接查询写语句第 3 章
○高7 SQL 嵌套与集合查询写语句第 3 章
○中8 SQL 更新与空值处理写语句第 3 章
○中9 视图写语句 / 简答第 3 章
○中10 安全性与授权写语句 / 简答第 4 章
○中11 完整性约束与触发器写语句第 5 章
○高12 候选码、范式判定与模式分解计算 / 设计题第 6 章
○高13 E-R 图设计与关系模式转换设计题第 7 章
○中14 数据库设计流程简答第 7 章
○中15 数据库编程(过程化 SQL / JDBC)简答 / 程序第 8 章
○中16 索引与查询优化简答 / 分析第 9-10 章
○高17 事务与并发调度判定分析 / 计算第 11-12 章
○高18 故障恢复策略简答 / 分析第 11 章
○了解19 新技术与 DBMS 结构选择第 13-18 章

第 1-2 章 概念与关系模型

三个考点,关系代数是本学期第一道计算大题。

考点 1

基本概念与三级模式

简答选择频率 中
答题要点(按这个顺序写)
  1. 四个概念:数据 → 数据库(DB,长期存储、有组织、可共享)→ 数据库管理系统(DBMS,软件)→ 数据库系统(DBS,引入数据库后的整个计算机系统)。
  2. 三级模式:外模式(用户视图,可有多个)、模式(全体数据的逻辑结构,唯一)、内模式(物理存储,唯一)。
  3. 两级映像与独立性:外模式/模式映像 → 逻辑独立性;模式/内模式映像 → 物理独立性。
  4. 数据模型三要素:数据结构、数据操作、完整性约束;概念模型常用 E-R 模型。
易错点
  • 两种映像与两种独立性对应关系记反:记住"外模式变了要改映像 → 逻辑独立;内模式变了要改映像 → 物理独立"。
  • 把 DB 与 DBMS 混用:前者是数据集合,后者是管理软件。
考点 2

关系模型术语与完整性

选择简答频率 中
解题步骤
  1. 判候选码:能唯一标识元组、且去掉任一属性后不再唯一的属性组(可能有多个)。
  2. 由候选码定主码;包含在任一候选码中的属性叫主属性,其余为非主属性。
  3. 外码:本关系中的属性(组),它不是本关系的码,却是另一关系的码。
  4. 三类完整性:实体(主码非空且不重复)、参照(外码取值要么为空、要么等于被参照关系某元组的主码值)、用户定义。
易错点
  • 外码可以为空,但主码绝不能为空——这是最常考的判断题。
  • 把"主属性"理解成"主码里的属性",实际上任一候选码中的属性都是主属性。
  • 关系必须满足"分量原子、列同质、行不重复"才叫规范化的关系。
考点 3

关系代数运算 ★

计算题频率 高
解题步骤
  1. 先挑行后挑列:需要筛选元组就写 σ条件(...),只需部分列就写 π列名(...)。
  2. 多表先连接:信息分散在多个关系时用 ⋈(自然连接按同名属性等值连接并去掉重复列)。
  3. 集合运算:并 ∪、差 −、交 ∩ 要求两关系属性个数相同且类型相容;笛卡尔积 × 无此要求。
  4. "全部 / 所有"用除运算 ÷:如 π Sno,Cno(SC) ÷ π Cno(Course)。
  5. 最后检查:是否漏掉投影(题目要求只要某些列时,只写这些列)。
示例
  • 查询选修 2 号课程的学生姓名:π Sname (σ Cno='2' (SC ⋈ Student))
  • 查询选修了全部课程的学生学号:π Sno,Cno (SC) ÷ π Cno (Course)
  • 查询未选修 1 号课程的学生姓名:π Sname(Student) − π Sname(σ Cno='1' (SC ⋈ Student))
易错点
  • 连接时漏写连接条件 → 变成笛卡尔积,行数暴涨,结果全错。
  • 差运算不满足交换律,A − B 与 B − A 完全不同。
  • 除运算的被除数必须包含目标属性 + 除对象属性两部分。
教材小节对照
  • 1.1 数据库系统概述 1.2 数据模型 1.3 三级模式结构 1.4 组成
  • 2.1 关系数据结构 2.2 关系操作 2.3 关系的完整性 2.4 关系代数 2.5 关系演算

第 3 章 SQL(六个考点,写语句题的主战场)

所有示例都可以在 SQL 在线沙盒 里直接运行验证。

考点 4

SQL 数据定义

写语句频率 中
解题步骤
  1. 先列列定义:列名 + 类型(CHAR / VARCHAR / INT / SMALLINT / DECIMAL / DATE)。
  2. 再加约束:PRIMARY KEY、UNIQUE、NOT NULL、CHECK、DEFAULT。
  3. 涉及多个列的约束(复合主码、外码)必须写成表级约束,写在所有列定义之后。
  4. 外码写明参照对象与违约处理:ON DELETE CASCADE / SET NULL / NO ACTION。
  5. 改结构用 ALTER(ADD / ALTER COLUMN / DROP COLUMN),删表用 DROP(CASCADE / RESTRICT)。
示例
  • CREATE TABLE SC (Sno CHAR(9), Cno CHAR(4), Grade SMALLINT CHECK (Grade BETWEEN 0 AND 100), PRIMARY KEY (Sno, Cno), FOREIGN KEY (Sno) REFERENCES Student(Sno) ON DELETE CASCADE);
易错点
  • 复合主码写成两个列级 PRIMARY KEY(错),必须合并写成表级一个。
  • SET NULL 要求该外码列允许为空,否则该策略无法定义。
考点 5

SQL 单表查询 ★

写语句频率 高
解题步骤(固定套路)
  1. 输出什么 → SELECT 后写列名(含计算列与别名,去重加 DISTINCT)。
  2. 从哪来 → FROM 表名。
  3. 要哪些行 → WHERE 条件(比较、BETWEEN、IN、LIKE、IS NULL、AND/OR/NOT)。
  4. 是否要统计 → 需要"每个/各"就要 GROUP BY;对分组结果筛选用 HAVING。
  5. 排序 → ORDER BY 列名 [ASC|DESC],放最后。
示例
  • 各课程平均分,只显示 ≥80 的:SELECT Cno, COUNT(*) AS cnt, AVG(Grade) AS avg_g FROM SC GROUP BY Cno HAVING AVG(Grade) >= 80;
  • 姓刘且名字两字:SELECT Sname FROM Student WHERE Sname LIKE '刘_';
易错点
  • WHERE 里写聚集函数(如 WHERE AVG(Grade)>80)→ 语法错误,应放 HAVING。
  • SELECT 中的非聚集列未出现在 GROUP BY 中 → 结果不确定。
  • 空值判断写 = NULL → 永远查不到,必须 IS NULL。
考点 6当前进度

SQL 连接查询 ★

写语句频率 高
解题步骤
  1. 先确定需要哪几张表(输出列来自哪些表)。
  2. 写 FROM A JOIN B ON 连接条件;多张表就继续 JOIN。
  3. 再叠加选择条件到 WHERE(或继续写在 ON 中)。
  4. 要求"包括没有…的"→ 用外连接(LEFT / RIGHT / FULL OUTER JOIN)。
  5. 同一张表要用两次(如查先修课的先修课)→ 自身连接 + 别名。
示例
  • 含未选课学生:SELECT Student.Sno, Sname, Cno, Grade FROM Student LEFT OUTER JOIN SC ON Student.Sno = SC.Sno;
  • 间接先修课:SELECT F.Cno, S.Cpno FROM Course F, Course S WHERE F.Cpno = S.Cno;
易错点
  • 漏写 ON 条件 → 得到笛卡尔积。
  • 多表列名冲突未加表名前缀 → 报错或取错列。
考点 7

SQL 嵌套与集合查询 ★

写语句频率 高难点
解题步骤
  1. 先写内层:内层负责求出一个集合或判断某个条件(如"选了 2 号课的学号")。
  2. 再定外层形式:落在集合内用 IN;与某个值比较用 ANY / ALL;只关心"有没有"用 EXISTS。
  3. 相关子查询:内层引用外层属性(如 SC.Sno = Student.Sno)时使用 EXISTS。
  4. 全称量词模板(背下来):查询"全部 / 所有"类题目用双层 NOT EXISTS: WHERE NOT EXISTS (SELECT * FROM 表X WHERE NOT EXISTS (SELECT * FROM 关系表 WHERE 关联条件))。
  5. 集合运算:UNION(并,去重)/ UNION ALL(不去重)/ INTERSECT(交)/ EXCEPT(差),要求列数相同、类型相容。
示例
  • 无选修 1 号课的学生:SELECT Sname FROM Student WHERE NOT EXISTS (SELECT * FROM SC WHERE SC.Sno = Student.Sno AND Cno = '1');
  • 选修了全部课程的学生:SELECT Sname FROM Student WHERE NOT EXISTS (SELECT * FROM Course WHERE NOT EXISTS (SELECT * FROM SC WHERE SC.Sno = Student.Sno AND SC.Cno = Course.Cno));
  • 比 CS 系某学生年龄小的:SELECT Sname FROM Student WHERE Sage < ANY (SELECT Sage FROM Student WHERE Sdept = 'CS');
易错点
  • 相关子查询忘记写关联条件 → 变成不相关子查询,语义完全改变。
  • 把"没有选过"写成 NOT IN 时,子查询结果含 NULL 会导致整体为空——优先用 NOT EXISTS。
  • ANY / ALL 方向写反:< ANY 是"小于某个",< ALL 是"小于全部"。
考点 8

SQL 更新与空值处理

写语句频率 中
解题步骤
  1. 插入:单条写 VALUES;批量用 INSERT INTO 表 SELECT ...(列数、类型要对应)。
  2. 修改:UPDATE 表 SET 列 = 表达式 WHERE 条件;一定要写 WHERE(否则全表更新)。
  3. 删除:DELETE FROM 表 WHERE 条件;清空数据但保留表结构用不带 WHERE 的 DELETE。
  4. 涉及其它表时:用子查询描述目标集合(如"把 CS 系学生的成绩置零")。
  5. 顺序:先删/改子表(有外码的一方),再动父表。
示例
  • UPDATE SC SET Grade = 0 WHERE 'CS' = (SELECT Sdept FROM Student WHERE Student.Sno = SC.Sno);
  • DELETE FROM SC WHERE Sno = '201215128';(之后才能删 Student 中的该生)
易错点
  • UPDATE / DELETE 漏写 WHERE → 影响全表。
  • 直接删除被参照表的元组 → 违反参照完整性被拒绝(除非级联)。
考点 9

视图

写语句简答频率 中
解题步骤 / 答题要点
  1. 定义:CREATE VIEW 名 AS SELECT ... WITH CHECK OPTION;
  2. 判断能否更新:行列子集视图可更新;含聚集函数、GROUP BY、DISTINCT 的视图不可更新。
  3. 查询视图时 DBMS 做视图消解,转换为对基本表的查询。
  4. 作用(简答必写):简化操作、多角度看待数据、提供逻辑独立性、安全保护、清晰表达查询。
易错点
  • 认为视图"存了数据"——它只存定义,数据仍来自基本表。
  • 对含 GROUP BY 的视图执行 UPDATE 会被拒绝,因为无法唯一映射回基本表。
教材小节对照
  • 3.1 SQL 概述 3.2 数据定义 3.3 数据查询(单表/连接/嵌套/集合/派生表) 3.4 数据更新 3.5 空值 3.6 视图

第 4-5 章 安全性与完整性

两个考点,写法固定,记住模板即可。

考点 10

安全性与授权

写语句简答频率 中
解题步骤 / 模板
  1. 授权:GRANT 权限 ON TABLE 表 TO 用户 [WITH GRANT OPTION];(列级权限要写列名)。
  2. 收回:REVOKE 权限 ON TABLE 表 FROM 用户 [CASCADE];
  3. 角色:CREATE ROLE → 授权给角色 → 把角色授予用户。
  4. 简答要点:身份鉴别、存取控制(DAC / MAC)、视图机制、审计(事后)、数据加密。
易错点
  • REVOKE 不加 CASCADE 只收回直接授权,转授出去的权限仍在。
  • 把安全性与完整性混为一谈:前者防非法用户,后者防不合法数据。
考点 11

完整性约束与触发器

写语句频率 中
解题步骤
  1. 实体完整性:PRIMARY KEY(多属性用表级定义)。
  2. 参照完整性:FOREIGN KEY ... REFERENCES ... + 违约处理策略。
  3. 用户定义完整性:NOT NULL、UNIQUE、CHECK(属性级 / 元组级)。
  4. 命名约束:CONSTRAINT 名 CHECK(...),便于后续 ALTER 修改或删除。
  5. 触发器:CHECK 表达不了的复杂规则用触发器(如自动记录修改日志)。
易错点
  • 元组级 CHECK 可引用多个列,属性级只能约束本列——用错位置会报错。
  • 默认违约处理是"拒绝执行",不是级联。

第 6-8 章 理论、设计与编程

四个考点,其中范式判定与 E-R 转换是两道典型大题。

考点 12

候选码、范式判定与模式分解 ★

计算题频率 高必考
解题步骤(标准化流程)
  1. 给属性分类:只在依赖左部出现(L 类,必属于任何候选码);只在右部出现(R 类,不属于任何候选码);左右都出现(LR 类);都不出现(N 类,必属于任何候选码)。
  2. 求候选码:先取 L ∪ N 求闭包;若闭包 = 全集,它就是唯一候选码;否则逐个加入 LR 类属性再求闭包。
  3. 判 2NF:看是否存在非主属性对码的部分函数依赖(即依赖于码的真子集)→ 有则不是 2NF。
  4. 判 3NF:看是否存在非主属性对码的传递依赖(非主属性依赖于另一个非主属性)→ 有则不是 3NF。
  5. 判 BCNF:看每个决定因素是否都包含码;只要有一个决定因素不含码,就不是 BCNF。
  6. 分解:按"消除部分依赖 → 消除传递依赖"逐步分解,分解后检查无损连接性与保持函数依赖。
示例
  • 题目:R(A,B,C),F = {A→B, B→C},求候选码与最高范式。
  • 求码:A 只在左部 → A⁺ = {A,B,C} = 全集 → 候选码为 A。
  • 判范式:A→B→C 中 C 通过 B 传递依赖于码 A → 存在传递依赖 → 最高只到 2NF,不属于 3NF。
  • 分解:R1(A,B)、R2(B,C),二者均为 3NF(且为 BCNF)。
易错点
  • 只判 3NF 不判 2NF,或跳级判断——必须逐层检查。
  • 忘记"主属性"也可能造成部分/传递依赖(判定 BCNF 时才需要考虑)。
  • 认为 BCNF 与 3NF 等价:BCNF 一定属于 3NF,反之不成立。
  • 分解后不检查无损连接性,导致信息丢失或增生。
配套练习
  • R(A,B,C,D),F = {AB→C, C→D, D→A},求候选码并判断是否属于 BCNF。
  • 将 SLC(Sno, Sdept, Sloc, Cno, Grade) 分解到 3NF(教材例题:先分 SL 与 SC,再分 SD 与 DL)。
考点 13

E-R 图设计与关系模式转换 ★

设计题频率 高
解题步骤
  1. 找实体:矩形表示,确定每个实体的属性与码。
  2. 找联系:菱形表示,标明基数(1:1、1:n、m:n);联系自身也可带属性。
  3. 转换规则:① 实体 → 一个关系模式(属性即列,码即主码);② 1:1 联系可并入任一端(加另一端码);③ 1:n 联系并入 n 端(加 1 端码,联系属性一并加入);④ m:n 联系必须单独建关系(两端码组合为主码 + 联系属性);⑤ 多元联系单独建关系。
  4. 标注每个关系模式的主码与外码。
  5. 合并分 E-R 图时消除三类冲突:属性冲突、命名冲突、结构冲突。
示例
  • "学生—课程"是 m:n 的"选修"联系(带成绩属性)→ SC(Sno, Cno, Grade),主码 (Sno, Cno),两个外码分别参照 Student 与 Course。
  • "系—学生"是 1:n → 在 Student 中加 Sdept 外码即可,不必单独建表。
易错点
  • m:n 联系没有单独建表(最常见的失分点)。
  • 三个及以上实体的多元联系被漏掉或拆成多个二元联系。
  • 转换后忘记标外码。
配套练习
  • 为"图书借阅"场景画 E-R 图(读者、图书、借阅记录)并转换为关系模式,标注主外码。
  • 为"医院住院"场景设计(科室、医生、病人、床位),注意 1:n 与 m:n 的区分。
考点 14

数据库设计流程

简答频率 中
答题要点(六阶段,按顺序写)
  1. 需求分析:产出数据流图与数据字典(数据项、数据结构、数据流、数据存储、处理过程)。
  2. 概念结构设计:产出独立于 DBMS 的 E-R 模型。
  3. 逻辑结构设计:E-R 图转换为关系模式并优化(通常以 3NF 为目标),设计外模式。
  4. 物理结构设计:选择存取方法、确定存储结构并评价。
  5. 数据库实施:建库、载入数据、应用程序编码与调试、试运行。
  6. 运行与维护:性能监控、备份恢复、重组织与重构造。
易错点
  • 把"概念结构设计"写成与具体 DBMS 有关——它必须独立于 DBMS。
  • 漏答数据字典的内容。
考点 15

数据库编程(过程化 SQL / JDBC)

简答程序题频率 中
解题 / 答题要点
  1. 为什么需要:SQL 表达能力的限制 → 用过程化 SQL(存储过程/函数、游标)或高级语言实现复杂逻辑。
  2. 游标:解决"SQL 面向集合、主语言面向记录"的阻抗失配;步骤为 定义 → 打开 → 逐条 FETCH → 关闭。
  3. JDBC 六步:加载驱动 → 建立连接 → 创建语句 → 执行 → 处理结果集 → 关闭资源(逆序)。
  4. 优先用 PreparedStatement:预编译、效率高、防 SQL 注入。
  5. 事务:setAutoCommit(false) → 多条更新 → commit,异常时 rollback。
易错点
  • ResultSet 遍历前未调用 next()。
  • 资源未按逆序关闭,或异常时未回滚事务。
教材小节对照
  • 6.1-6.5 关系数据理论(函数依赖、码、范式、公理系统、模式分解)
  • 7.1-7.6 数据库设计 8.1-8.4 数据库编程

第 9-10 章 存储管理与查询优化

一个考点,偏简答与分析。

考点 16

索引与查询优化

简答分析频率 中
答题要点
  1. 索引结构:顺序表索引、辅助索引、B+ 树(关键字都在叶结点、叶结点链表相连,适合范围查询)、哈希索引(适合等值查询)、位图索引(适合低基数列)。
  2. 代价:索引加快查询但降低插入更新速度;一个表只能有一个聚簇索引。
  3. 查询处理步骤:查询分析 → 查询检查 → 查询优化 → 查询执行。
  4. 代数优化(启发式规则):选择尽可能早做、投影与选择同时进行、把选择与笛卡尔积合并为连接、找出公共子表达式。
  5. 物理优化:基于启发式规则(如索引扫描、嵌套循环/排序合并/散列连接的选择)与基于代价估算。
易错点
  • 认为用户可以强制指定索引——优化器自动选择,用户只能通过建索引、改写 SQL 间接影响。
  • "索引越多越好"是错的:更新频繁的表会被拖慢。

第 11-12 章 事务、并发与恢复

两个高频大题考点:调度判定与恢复策略。

考点 17

事务与并发调度判定 ★

分析题计算频率 高
解题步骤(冲突可串行化判定)
  1. 标出冲突操作:同一数据对象上,至少有一个是写操作的两个操作(读-写、写-读、写-写)才是冲突操作。
  2. 画优先图:若事务 Ti 的冲突操作先于 Tj 的冲突操作,则画一条 Ti → Tj 的有向边。
  3. 判环:图中无环 → 冲突可串行化(拓扑排序即等价的串行顺序);有环 → 不是冲突可串行化调度。
  4. 封锁协议对应问题:一级(改前加 X 锁至事务结束)防丢失修改;二级再加读前 S 锁读完即放,防读脏数据;三级再加读前 S 锁至事务结束,防不可重复读。
  5. 两段锁协议:加锁阶段与解锁阶段严格分开 → 保证可串行化,但可能产生死锁;一次封锁法不死锁但并发度低。
示例
  • 调度 R1(A) W2(A) R2(B) W1(B):A 上 T1 读先于 T2 写 → T1→T2;B 上 T2 读先于 T1 写 → T2→T1;成环 → 不可串行化。
  • 若改为 R1(A) W1(B) R2(A) W2(B):两条边都是 T1→T2,无环 → 可串行化(等价于 T1 先于 T2)。
易错点
  • 把两个读操作也算作冲突(读-读不冲突,不画边)。
  • 忘记两段锁协议"保证可串行化但可能死锁"这一结论,与一次封锁法混淆。
  • 隔离级别与三类不一致现象的对应关系记错(读未提交会出现脏读,可串行化最严格)。
配套练习
  • 给定调度 R1(X) R2(X) W1(X) W2(X) R1(Y) W2(Y),画优先图并判断是否冲突可串行化。
  • 说明三级封锁协议各自解决什么问题,并举例说明二级与三级的差别。
考点 18

故障恢复策略 ★

简答分析题频率 高
解题步骤
  1. 判故障类型:事务内部故障 / 系统故障 / 介质故障 / 病毒。
  2. 扫日志定清单:正向扫描日志,有 COMMIT 记录的事务 → REDO 队列;只有 BEGIN 无 COMMIT → UNDO 队列。
  3. 事务故障:反向扫描日志,对该事务的更新执行 UNDO(撤销),直到 BEGIN。
  4. 系统故障:先 UNDO 未完成事务,再 REDO 已提交事务。
  5. 介质故障:装入最近的后备副本 → REDO 此后所有已提交事务。
  6. 有检查点时:只处理检查点之后开始/活跃的事务,缩短扫描范围。
答题要点(简答必写)
  • 先写日志原则(WAL):必须先写日志再写数据库,否则无法判断重做还是撤销。
  • ACID:原子性、一致性、隔离性、持久性;事务是恢复与并发控制的基本单位。
  • 数据库镜像用于提高可用性,不是恢复的替代手段。
易错点
  • REDO 与 UNDO 的对象搞反:已提交要重做,未提交要撤销。
  • 认为检查点可以替代日志——它只是加速扫描。
教材小节对照
  • 11.1-11.7 恢复技术 12.1-12.9 并发控制

第 13-18 章 新技术与 DBMS 结构

一个考点,以概念选择题为主。

考点 19

DBMS 结构与新技术 ★

选择频率 了解
答题要点
  1. DBMS 层次:应用层 → 语言处理层 → 数据存取层 → 数据存储层(含缓冲区管理)。
  2. 大数据管理系统:键值、文档、图、时序四类 NoSQL 各自的数据模型与场景。
  3. 数据仓库:面向主题、集成、非易失、时变;OLAP 的多维操作(切片、切块、钻取、旋转);HTAP 是事务与分析混合。
  4. 内存数据库:仍需日志与检查点保证持久性,不是"不要持久化"。
  5. 区块链与数据库:区块链擅长多方不可篡改存证,不擅长高频交易与复杂查询。
易错点
  • 把 OLTP 与 OLAP 的特征记混(前者高频短事务,后者复杂分析查询)。
  • 认为内存数据库不需要恢复机制。

练习题

先自己写,再点开解答对照。下面各题都可以直接粘到 SQL 在线沙盒 里运行(沙盒已支持增删改,数据按会话保留)。

练习 1 · 单表查询与排序

  • 题目:查询计算机系(CS)学生的姓名与年龄,按年龄从大到小排列。
查看解答
SELECT Sname, Sage
FROM Student
WHERE Sdept = 'CS'
ORDER BY Sage DESC;
  • 要点:ORDER BY 默认升序 ASC,降序要显式写 DESC。
  • 结果:陈冬(20)、李勇(20)、刘晨(19)。

练习 2 · 三表连接查询

  • 题目:查询每个学生选修的课程名与成绩,输出姓名、课程名、成绩。
查看解答
SELECT s.Sname, c.Cname, sc.Grade
FROM Student s
JOIN SC     sc ON s.Sno = sc.Sno
JOIN Course c  ON sc.Cno = c.Cno;
  • 要点:多表连接时列名前要加表别名限定;JOIN 等价于 INNER JOIN, 只有两边都匹配的行才会出现(所以成绩为 NULL 的选课记录仍会出现,因为它有匹配行)。
  • 想保留"没选课的学生"才需要 LEFT JOIN。

练习 3 · 嵌套查询

  • 题目:查询选修了"数据库"这门课的学生姓名(用嵌套查询实现)。
查看解答
SELECT Sname
FROM Student
WHERE Sno IN (
  SELECT Sno
  FROM SC
  WHERE Cno = (SELECT Cno FROM Course WHERE Cname = '数据库')
);
  • 要点:内层先由课程名查出课程号,再由 SC 查出选课学号,外层用 IN 匹配。
  • 若内层可能返回多行,用 IN 而不是 =;本例课程号唯一,也可用 =。
  • 结果:李勇。

练习 4 · 插入并验证(沙盒已支持写操作)

  • 题目:给学号 201215122(刘晨)插入一条选修 1 号课程、成绩 88 的选课记录, 然后查询这位同学的全部选课,验证插入结果。
  • 提示:沙盒支持 INSERT,插入后可以直接 SELECT 看到;想恢复初始数据点沙盒里的「重置示例库」。
查看解答
INSERT INTO SC VALUES ('201215122', '1', 88);

SELECT Cno, Grade FROM SC WHERE Sno = '201215122';
  • 要点:一次只能执行一条语句,所以两条要分两次运行。
  • 若插入违反外键(例如学号不存在或课程号不存在),沙盒会报"完整性约束冲突"—— 这正是实体完整性 / 参照完整性约束在起作用。
  • 验证结果:应能看到刘晨的 2 号课 90 分、3 号课 80 分,以及刚插入的 1 号课 88 分。

笔记与作业

待补充:实验报告(建库建表、SQL 查询与操纵、安全性与完整性控制、数据库设计、备份恢复、并发控制)、课后习题与错题;建议按考点归档为 Markdown 后在此处挂链接。
教材版本:本页按王珊、杜小勇、陈红《数据库系统概论》第 6 版(高等教育出版社,2023)的篇—章顺序排布考点,全书 4 篇 18 章。系统讲解见 SQL 语法教学 与 理论与设计教学;写语句类考点可在 在线沙盒 中即时验证。