type
status
date
slug
summary
tags
category
icon
password
一、关系代数操作题(15分)
设有关系:
Reader(Rno读者编号,Rname姓名,Rsex性别,Rdept单位);
Book(Bno图书编号,Bname书名,Bauth主编,Pub出版社,Price单价);
RB(Rno,Bno,Date订阅数量)
请用关系代数实现以下操作:
(1)查询“张晓明”读者的编号和单位;
核心操作:选择(σ) + 投影(π),先通过
σ_{Rname='张晓明'}
在Reader表中筛选姓名条件,再用 π_{Rno, Rdept}
提取所需列。备考重点:单表查询是基础,必须熟练掌握选择(筛选行)和投影(筛选列)的组合使用。
(2)查询图书为“数据库编程”的订阅数量;
核心操作:自然连接(⋈) + 选择(σ) + 投影(π),先通过
σ_{Bname='数据库编程'}
在Book表筛选图书,再与RB表按 共同属性Bno自然连接(⋈),最后投影 π_{Date}
提取订阅数量。备考重点:多表查询必考连接操作!自然连接(⋈)自动按同名属性(Bno)关联两表。
易错点:若RB表中订阅数量字段名为
Date
(题目已给定),不可写作其他名称。(3)查询订阅了图书“数据库编程”的读者编号,姓名和单位。
核心操作:两次自然连接(⋈) + 选择(σ) + 投影(π)
分步理解:
① 先关联Book和RB表:
σ_{Bname='数据库编程'}(Book) ⋈ RB
(获取订阅了该书的所有Rno)② 将结果与Reader表连接:
Reader ⋈ [步骤①结果]
(关联读者信息)③ 投影所需列:
π_{Rno, Rname, Rdept}
备考重点:
多表连接顺序:优先过滤条件(如书名),再连接其他表,可减少中间结果大小。
投影时需明确字段来源表(如Rno来自Reader或RB均可,但语义需一致)。
✦ 关键知识总结与备考建议
操作 | 符号 | 作用 | 高频考点 |
选择 | σ | 按条件筛选行 | 条件写在σ下标(如σ_{条件}) |
投影 | π | 筛选列 | 需指定列名(如π_{A,B}) |
自然连接 | ⋈ | 自动按同名属性连接 | 连接字段必须同名且类型一致 |
二、SQL操作题(25分)
设有关系:
Reader(Rno读者编号,Rname姓名,Rsex性别,Rdept单位);
Book(Bno图书编号,Bname书名,Bauth主编,Pub出版社,Price单价);
RB(Rno,Bno,Date订阅数量)
请用SQL语言实现以下操作:
1、查询所有图书的图书编号,出版社和单价,查询结果按出版社降序排列;
核心考点:基础查询(
SELECT
)+ 排序(ORDER BY
),DESC
表示降序(默认ASC
为升序),若出版社相同则按物理顺序返回。易错点:排序字段必须出现在
SELECT
子句或可隐式推导(如聚合函数中),否则可能报错(如MySQL严格模式)。2、查询订阅了“98710220011”图书的读者姓名和单位;
嵌套子查询(推荐):
多表连接:
必会技能:两种写法均需掌握,考试按题目倾向选择
3、统计每种图书的订阅总数,属性包括图书编号,订阅数量;
核心考点:聚合函数(
SUM
)+ 分组(GROUP BY
)关键细节:
分组字段
Bno
必须出现在SELECT
子句中(非聚合字段);别名
TotalSubscription
使结果更清晰(题目未要求属性名,但建议规范命名)。易错点:混淆
COUNT
(统计行数)和SUM
(求和),此处需求是订阅数量的总和。4、将图书 “数据挖掘技术”的订阅数量改为63;
核心考点:带子查询的更新(先通过书名查Bno,再更新RB表)
陷阱:不可直接更新
Book
表(题目要求改订阅数量,数据在RB
表)5、创建包含读者编号,读者姓名,书名,订阅数量等属性的视图。
核心考点:多表连接视图创建
关键细节:
使用显式连接(
JOIN
)避免笛卡尔积;为表设置别名(
R
/RB
/B
)简化代码;视图字段自动继承
SELECT
的列名(无需单独命名)。易错点:漏连表(如忘记关联
Book
导致无法获取Bname
)。✦ SQL高频考点总结与备考策略
操作类型 | 核心关键字 | 注意事项 |
基础查询 | SELECT 、ORDER BY | 排序字段必须明确 |
连接查询 | JOIN 、ON | 避免遗漏连接条件(否则笛卡尔积) |
聚合统计 | GROUP BY 、SUM | 非聚合字段必须出现在 GROUP BY 中 |
子查询 | IN 、= (子查询) | 子查询结果需与外层条件匹配(单行/多行) |
数据更新 | UPDATE 、SET | 更新条件需精确(常通过子查询定位) |
视图创建 | CREATE VIEW | 视图本质是虚拟表,不存储数据 |
三、思考题(25分)
1、请用数据库原理的知识解释:无论你此刻在外省的家里还是在兰州的校园内都可以访问到考试试题,进行本场考试。
数据库是长期存储在计算机内有组织、大量、共享的数据集合。
它可以供各种用户共享,具有最小冗余度和较高的数据独立性。
数据库管理系统在数据库建立、运用和维护时对数据库进行统一控制。
2、数据库的完整性体现在哪几个方面?每种完整性如何具体实现?
完整性类型 | 实现方式 | 示例 |
实体完整性 | 主键约束( PRIMARY KEY ) | Rno CHAR(10) PRIMARY KEY |
参照完整性 | 外键约束( FOREIGN KEY ) | FOREIGN KEY(Bno) REFERENCES Book |
域完整性 | 数据类型/检查约束( CHECK ) | Price DECIMAL(8,2) CHECK(Price>0) |
用户定义完整性 | 触发器( TRIGGER ) | 用触发器验证订阅数量≥0 |
3、什么是数据库的安全性?数据库安全常采用的方法有哪些?
定义:防止未授权访问、篡改或泄露数据。
安全方法:用户标识和鉴别,存取控制,视图机制,审计,数据加密。
4、建立冗余主要有哪些方法?日志文件在数据库恢复中的作用是什么?
冗余方法:数据转储,登录日志文件。
日志文件作用:
◆ 事务故障恢复和介质故障恢复必须用日志文件。
◆ 在动态转储方式中必须建立日志文件,后备副本和日志文件综合起来才能有效地恢复数据库。
◆ 在静态转储方式中,也可以建立日志文件。当数据库毁坏后可重新装入后备副本把数据库恢复到转储结束时刻的正确状态,然后利用日志文件,把已完成的事务进行重做处理,对故障发生时尚未完成的事务进行撤消处理。
备考重点:理解日志的 WAL原则(Write-Ahead Logging)。
5、如图两个事务T1,T2进行并发执行,请问,产生了什么问题?并说明如何利用封锁机制解决此问题。

不可重复读:
T1 在步骤①读取
B=20
,T2 在步骤②修改 B=30
并提交。T1 在步骤③再次读
B
得到 30
,导致同一事务内两次读取结果不一致。封锁机制解决方案:


四、模式分解(15分)
已知关系模式 R(学号,姓名,性别,所在专业,专业负责人,教材编号,教材名称,购买数量),其中,每位学生可以购买多种教材,每一种教材也可以由多名学生购买;学生购买不同的教材数量不同;每位学生只能属于一个专业,每个专业只有一名专业负责人。
(1) 请给出所有的函数依赖关系;
函数依赖集 F 为:
F = { 学号 → 姓名, 性别, 所在专业;
所在专业 → 专业负责人;
教材编号 → 教材名称;
(学号, 教材编号) → 购买数量 }
(2) 给出该关系模式的候选码,并判断该关系模式满足第几范式?
候选码:(学号, 教材编号)
解释
(学号, 教材编号) 可以决定所有属性(通过函数依赖推导:学号决定姓名、性别、所在专业;所在专业决定专业负责人;教材编号决定教材名称;(学号, 教材编号) 决定购买数量)。
没有其他属性集能作为候选码(例如,学号不能决定教材相关属性,教材编号不能决定学生相关属性)。
满足的范式:1NF(但不满足 2NF)
解释
◆ 满足 1NF:所有属性都是原子的(无多值或复合属性)。
◆ 不满足 2NF:存在部分函数依赖(非主属性不完全依赖于候选码)。具体问题:
姓名、性别、所在专业部分依赖于候选码的子集学号(即学号 → 姓名、性别、所在专业)。
教材名称部分依赖于候选码的子集教材编号(即教材编号 → 教材名称)。
◆ 不满足 2NF,因此也不满足更高范式(如 3NF 或 BCNF)。
(3)请根据规范化理论,将关系模式R分解到3NF。
根据规范化理论,分解的目标是消除部分依赖和传递依赖,确保每个关系满足 3NF。
分解步骤如下:
- 分解到 2NF:消除部分依赖。将只依赖于候选码子集的属性拆分到新关系。
- 分解到 3NF:消除传递依赖(如所在专业 → 专业负责人)。
分解后的关系模式(每个关系均满足 3NF):
◆ 学生表(Student):(学号, 姓名, 性别, 所在专业)
函数依赖:学号 → 姓名, 性别, 所在专业
候选码:学号
满足 3NF:无非主属性对码的部分依赖或传递依赖。
◆ 专业表(Department):(所在专业, 专业负责人)
函数依赖:所在专业 → 专业负责人
候选码:所在专业
满足 3NF:直接依赖,无传递依赖。
◆ 教材表(Book):(教材编号, 教材名称)
函数依赖:教材编号 → 教材名称
候选码:教材编号
满足 3NF:直接依赖,无传递依赖。
◆ 购买表(Purchase):(学号, 教材编号, 购买数量)
函数依赖:(学号, 教材编号) → 购买数量
候选码:(学号, 教材编号)
满足 3NF:完全依赖,无部分或传递依赖。
✦ 范式判断:
1NF:属性原子性(基础)
2NF:消除部分依赖(针对复合码)
3NF:消除传递依赖(非主属性不依赖于其他非主属性)
五、数据库设计(20分)
拟建立某高校研究生创新竞赛管理系统,其中包括研究生,专业,竞赛项目,指导教师等信息。
◆ 研究生:学号,姓名,性别,年龄,专业;
◆ 竞赛项目:竞赛名称,主办单位,承办单位,级别;
◆ 指导教师:教师编号,教师姓名,性别,年龄,职称,学历;
◆ 专业:专业编号,专业名称,负责人。
其中:
每种竞赛由多名研究生完成,每位研究生可以参与不同的竞赛,研究生在不同竞赛中的获奖情况不同;
每个教师可以指导不同类型的竞赛,每种竞赛有若干指导教师,每个教师在不同的竞赛中指导人数和获奖情况不同;
每位研究生只能属于一个专业。
要求:
(1)画出系统E-R图;

(2)将系统E-R图转换为相应的逻辑结构,并标出每个关系模式的主键和外键(如果有);
教师(教师编号,姓名,性别,年龄,职称,学历);
研究生(学号,姓名,性别,年龄,专业编号);专业编号是外键,参照 专业(专业编号,专业名称,负责人);
竞赛项目(竞赛名称,主办单位,承办单位,级别);
专业(专业编号,专业名称,负责人);
指导(教师编号,竞赛名称,获奖情况,人数);
参与(学号,竞赛名称,获奖情况)。
(3)画出系统的关系图。

- 作者:EageYren
- 链接:https://eageyren.edu.deal/learning/sqlyl
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。