数据库相关习题整理01
- 数据库系统的基本特征: 【数据共享性、独立性和冗余度小】
- 【DBS】包括【DB】和【DBMS】
- 关系代数 【R-(R-S) = R∩S】
- 自然连接是构成新关系的有效方法。当关系R和S使用自然连接时,要求R和S含有一个或多个共有的【属性】
- 现实世界到机器世界的一个中间层次是【关系模型】
- 关系代数5种基本运算: 【并、差、选择、投影、笛卡尔积】
- 设有关系模式R(A,B,C)和S(C,D)。
与SQL语句【SELECT A,B,D FROM R,S WHERE R.C = S.C】等价的关系代数形式:
- SQL的视图是从【基本表或视图】中导出来的
- SQL中【BETWEEN 18 AND 30】 ===> 【包括18岁和30岁】
- 允许取空值但不允许出现重复值的约束时【UNIQUE】
- 数据库的完整性指数据的【正确性】和【相容性】
- SQL的【GRANT】和【REVOKE】主要用来维护DB的【安全性】
- 在DB涉及中【数据流图(DFD)】和【数据字典(DD)】主要用来描述结构化方法中的【需求分析】阶段的工具
- 从E-R模型关系向关系模型转换时,一个M:N联系转换为关系模式时,该关系模式的码是【M端实体码与N端实体码组合】
- SQL中的集合处理方式与宿主语言单记录的处理方式之间用【游标】来协调
- 当讲局部E-R图集成为全局E-R图时,如果同一对象在一个局部E-R图中作为实体,而在另一个局部E-R图中作为属性,这种现象称之为:【结构冲突】
- 关系数据库范式并不是越高越好需要符合以下几点:
- 关系满足的范式越高,则更新操作的代价就越低;
- 关系满足的范式越高,则查询操作的代价就越高;
- 关系模型和网状模型的数据结构分别是【二维表】和【有向图】
- 数据模型是有【数据结构】【数据操作】和【完整性约束】三个部分组成的
- 关系数据语言可分为三类:【SQL语言】【关系代数语言】和【关系演算语言】
- 删除基本表用【DROP】语句,删除基本表的元素【DELETE】语句
- 规范化数据库设计可以划分为如下6个设计阶段:
【需求分析阶段】【概念结构设计】【逻辑结构设计】【物理结构设计】【数据库实施阶段】【数据库运行】和【维护阶段】 - 事务特性(ACID): 【Atomic - 原子性】【Consistency - 一致性】【Isolation - 隔离性】【Durability - 持久性】
- 当对视图进行UPDATE、INSERT和DELETE操作时,为了保证被操作的行满足视图定义中子查询语句的谓词条件,应该在视图定义语句中使用可选择项【WITCH CHECK OPTION】
- SQL中,表有三种【视图】【基本表】和【虚表】
- 在函数依赖的范畴内【BC范式】达到了最高的规范化程度。
- 在DBMS的规范化理论中,执行“分解”操作必须遵守:保持原有的函数依赖和【无损连接】
- 在DB中存储的内容是【数据以及数据之间的联系】
- ★在DB中,产生数据不一致的根本原因【数据冗余】
由于数据冗余,有时修改数据时,一部分数据修改,而另一部分没有修改,造成同一种数据有多个值,产生数据不一致。
- SQL语言中“视图(VIEW)”对应DB系统三级模式结构中的【外模式】
- SQL的GRANT和REVOKE语句主要用来维护DB的【安全性】
- 各种范式之间的包含关系正确的是【4NF ∈ BCNF ∈ 3NF ∈ 2NF ∈ 1NF】
- 数据库的【完整性】是指数据的【正确性】和【相容性】
- 一个事务执行过程中,其正在访问的数据被其他事务所修改,导致处理结果不正确,这是由于违背了事务的【隔离性-Isolation】而引起的
- 当局部E-R图集成为全局E-R图时,如果同一对象在一个局部E-R图中作为实体,而在另一个局部E-R图中作为属性,则这种现象称为【结构冲突】
- 关系代数是一种关系操作语言,其操作对象和操作结果均是【关系】
- 为一个基本表增加列和完整性约束条件时,应该使用SQL语句的【ALTER TABLE】
- DBS的特点是【数据共享】【数据独立】【减少数据冗余】【避免数据不一致】【加强数据保护】
- 关系数据库中,实现表与表之间的联系是通过【参照完整性规则】
- 设关系R有K1个元组,关系S有K2个元组,则关系R和S进行笛卡尔积操作后的结果关系中元素的数目是【K1 * K2】
- 对关系的完整性约束通过包括【实体完整性、参照完整性、用户自定义完整性】三种
- 建立视图命令是【CREATE VIEW】
- 数据库的完整性是指数据的【正确性】和【相容性】
- 应用DB的主要目的是【共享数据问题】
- 一个事务中诸操作要么全做,要么都不做,这是事务的【原子性】特征
- 采用数据库镜像技术,主要是为了有效解决【介质故障】的问题
- 若事务T对数据R已经加上S锁🔒,则对数据R【可以加S锁不能加X锁】
- 设有两个事务T1、T2其并发操作如图,该操作【读“脏”数据】
- DB常用的数据模型有【关系模型】【层次模型】【网状模型】
- DBS的核心是【DBMS】
- DBS中的故障分类为:【事务内部故障】【计算机病毒】【系统故障】【介质故障】
- 在DB概念结构设计中,各分E-R模型之间的冲突主要有:【属性冲突】【结构冲突】【命名冲突】
- 二级封锁协议除了可以防止【丢失修改】也可以防止【读“脏”数据】
什么是数据库?
答: 数据库是长期存储在计算机内、有组织的、可共享的数据集合。
数据库是按某种数据模型进行组织的、存放在外存储器上,且可以被多个用户同时使用。
因此,数据库具有较小的冗余度、较高的数据库独立性和易扩展性。
数据库是按某种数据模型进行组织的、存放在外存储器上,且可以被多个用户同时使用。
因此,数据库具有较小的冗余度、较高的数据库独立性和易扩展性。
DBMS的主要功能
答: DBMS是位于OS与用户之间的一个数据管理软件,功能包括以下方面:
1. 数据定义功能。DBMS提供DDL用于数据库的定义。
2. 数据操作功能。DBMS提供DML用于数据库的基本操作:查询、插入、修改、删除。
3. 数据库的运行管理。包括开发控制,安全性检查,完整性约束条件的检查和执行,数据库的内容维护等。
4. 数据库的建立和维护功能。包括数据库初始数据的输入以及转换,数据库的转储与恢复,数据库的重组功能和性能的检视与分析功能等。
1. 数据定义功能。DBMS提供DDL用于数据库的定义。
2. 数据操作功能。DBMS提供DML用于数据库的基本操作:查询、插入、修改、删除。
3. 数据库的运行管理。包括开发控制,安全性检查,完整性约束条件的检查和执行,数据库的内容维护等。
4. 数据库的建立和维护功能。包括数据库初始数据的输入以及转换,数据库的转储与恢复,数据库的重组功能和性能的检视与分析功能等。
DBA的职责
1) 参与数据库设计,决定DB的结构和内容;
2) 定义数据的安全性、完整性,负责分配用户对DB的使用权限和口令管理;
3) 监督控制DB的使用和运行,改进和重新构造DBS;
4) 帮助终端用户使用DB;
2) 定义数据的安全性、完整性,负责分配用户对DB的使用权限和口令管理;
3) 监督控制DB的使用和运行,改进和重新构造DBS;
4) 帮助终端用户使用DB;
数据库系统中三层模式结构?采用三层模式结构有什么好处?
DBS的三级模式是对数据的三个抽象级别,将数据的具体组织留给DBMS管理,使用户能够逻辑地抽象地处理数据而不必关系
数据在计算机中地具体表示和存储方式。
DBMS在三级模式之间提供两层映像:
外模式/模拟:保证数据库的逻辑独立性
模式/内模式:保证数据库的物理独立性
数据在计算机中地具体表示和存储方式。
DBMS在三级模式之间提供两层映像:
外模式/模拟:保证数据库的逻辑独立性
模式/内模式:保证数据库的物理独立性
什么是数据库的安全性? DBMS的安全性措施
(1)数据库的安全性: 保护DB以防止不合法使用所造成的数据泄露、更改或破坏。
(2)DBMS通过以下方法保证DB的安全:
① 通过定义【用户标识】对身份进行鉴定。
② 通过定义【用户访问权限】进行权限管控。
③ 通过定义【视图】屏蔽掉用户不能访问的数据。
④ 通过【数据加密】和【审计】功能来保护DB中的安全性。
(2)DBMS通过以下方法保证DB的安全:
① 通过定义【用户标识】对身份进行鉴定。
② 通过定义【用户访问权限】进行权限管控。
③ 通过定义【视图】屏蔽掉用户不能访问的数据。
④ 通过【数据加密】和【审计】功能来保护DB中的安全性。
在DB设计过程中将E-R模型转换为关系数据模型的转换原则是什么?
① 1:1关系:将两个实体转换为两个关系模式,然后再任意一个关系模式中加入另一个关系模式的键和联系类型的属性。
② 1:N关系:将两个实体分别转换为两个关系模式,将在N端实体转换的关系模式中加如1端实体转换的关系模式的键和联系类型的属性。
③ M:N关系: 将两个实体分别转换为两个关系模式,然后将联系类型转换为第三个关系模式,其属性由两端实体的键和联系类型的属性构建。
② 1:N关系:将两个实体分别转换为两个关系模式,将在N端实体转换的关系模式中加如1端实体转换的关系模式的键和联系类型的属性。
③ M:N关系: 将两个实体分别转换为两个关系模式,然后将联系类型转换为第三个关系模式,其属性由两端实体的键和联系类型的属性构建。
DB综合题01
- Table - Student
|列名|说明|数据类型|约束|
|:--|:--|:--|:--|:--|
|Sno|学号|字符(8)|主键|
|Sname|姓名|字符(12)|非空,唯一|
|Ssex|性别|字符(2)|取'男'或'女',默认值'男'|
|Sage|年龄|整型|取值15~36,默认值22|
|Sdept|院系|字符(20)|默认'计算机系'|
- Table - Course
|列名|说明|数据类型|约束|
|:--|:--|:--|:--|:--|
|Cno|课程号|字符(8)|主键|
|Cname|课程名|字符(8)|非空|
|Teacher|教师名|字符(10)|唯一|
- Table - SC
|列名|说明|数据类型|约束|
|:--|:--|:--|:--|:--|
|Sno|学号|字符(8)|主键,参照Student表,级联更新和删除|
|Cno|课程号|字符(8)|主键,参照Course表,级联更新,拒绝删除|
|Grade|成绩|短整型|取值 0 ~ 100|
关系代数表达式表述下列问题
1)检索选修了课程号为C5的学生学号、年龄和院系;
2)检索选修了教师为“李华”所授课程的学生姓名和学号;
编写SQL语句
1) 创建Student表的SQL语句
CREATE TABLE Student ( Sno CHAR(8) PRIMARY KEY, Sname CHAR(12) NOT NULL UNIQUE, Ssex CHAR(2) CHECK(Ssex IN ('男','女')) DEFAULT '男', Sage INT CHECK(Sage >= 15 AND Sage <= 36) DEFAULT 22, Sdept CHAR(20) DEFAULT '计算机系' );
2)检索课程名以"DB_"开头,且倒数第3个字符为K的课程情况
SELECT * FROM Course WHERE Cname LIKE 'DB\_%k__' ESCAPE '\';
3)向学生选修课程表中插入元组“学生S10选修课程号C4”
INSERT INTO SC(Sno,Cno) VALUES('S10','C4');
4)删除选课成绩在55分以下的学生记录
DELETE FROM Student WHERE Sno IN( SELECT Sno FROM SC WHERE Sgrade < 55 );
5)把“高等数学”课程成绩提高8%
UPDATE SC SET Grade = Grade + (Grade * 0.08) WHERE Cno IN( SELECT Cno FROM Course WHERE Cname = '高等数学' );
6)找出女同学的每一年龄组(超过3人)有多少人?要求查询结果按人数降序排列
SELECT COUNT(Sno),Sage FROM Student WHERE Ssex = '女' GROUP BY Sage HAVING COUNT(Sno) > 3 ORDER BY Sage DESC;
7) ★定义视图S_age,其中包括学生学号以及每个学生选修课程的门数(要求成绩非空和平均成绩)
CREATE VIEW S_age(Sno, Cno_num, Avg_grade) AS SELECT Sno,COUNT(Cno),AVG(Grade) FROM SC WHERE Grade IS NOT NULL GROUP BY Sno;
8)在Course表中增加一个类型为char(10)的职称(pro)列
ALTER TABLE Course ADD COLUMN pro CHAR(10);
DB综合体02
- Table - Student
列名 | 说明 | 数据类型 | 约束 |
---|---|---|---|
Sno | 学号 | 字符(8) | 主键 |
Sname | 姓名 | 字符(12) | 非空,唯一 |
Ssex | 性别 | 字符(2) | 取'男'或'女',默认值为'女' |
Sage | 年龄 | 整型 | 取值16~40,默认值为21 |
Sdept | 院系 | 字符(20) | 默认'电子系' |
- Table - Course
列名 | 说明 | 数据类型 | 约束 |
---|---|---|---|
Cno | 课程号 | 字符(8) | 主键 |
Cname | 课程名 | 字符(8) | 非空 |
Teacher | 教师名 | 字符(10) | 唯一 |
- Table - SC
列名 | 说明 | 数据类型 | 约束 |
---|---|---|---|
Sno | 学号 | 字符(8) | 主键 |
Cno | 课程号 | 字符(8) | 主键 |
Grade | 成绩 | 短整型 | 取值0~100 |
1)检索选修了教师'王敏'所教授课程的学生姓名和学号;
2)检索选修了课程号为C3或者C5的学生学号和成绩;
3) 用SQL语句建立Student表
CREATE TABLE Student ( Sno CHAR(8) PRIMARY KEY, Sname CHAR(12) NOT NULL UNIQUE, Ssex CHAR(2) CHECK(Ssex IN ('男','女')) DEFAULT '女', Sage INT CHECK(Sage >= 16 AND Sage <= 40) DEFAULT 21, Sdept CHAR(20) DEFAULT '电子系' );
4) 检索姓“李”且倒数第2个字为“华”或“涛”字的学生的姓名和学号
SELECT Sname, Sno FROM Student WHERE Sname WHERE Sname LIKE '李%[华涛]__'; // WHERE Sname LIKE '李%华__' OR '李%涛__';
5)向学生选修课程表中插入元组“学生S6选修课程号C2”
INSERT INTO SC(Sno, Cno) VALUES('S6', 'C2');
6)删除选课成绩在60分以下的学生记录
DELETE FROM Student WHERE Sno IN ( SELECT Sno FROM SC WHERE Grade < 60 ); // 或 DELETE FROM Student WHERE Student.Sno = SC.Sno AND SC.Grade < 60;
7)把“大学英语”课程成绩提高5%
// version 1 UPDATE SC SET Grade = Grade * 1.05 WHERE SC.Cno = Course.CNO AND Course.Cname = '大学英语' // version 2 UPDATE SC SET Grade = Grade * 1.05 WHERE Cno IN ( SELECT Cno FROM Course WHERE Course.Cname = '大学英语' );
8)求出男同学的每一年龄组(超过4人)有多少人?要求查询结果按人数降序排列
SELECT Sage, COUNT(Sno) AS Stu_num FROM Student WHERE Ssex = '男' GROUP BY Sage HAVING COUNT(Sno) > 4 ORDER BY Stu_num DESC;
9)定义视图S_age,其中包括学生学号以及每个学生选修课程的门数(成绩非空)和平均成绩
CREATE VIEW S_age(Sno, Total_course, Avg_grade) AS SELECT Sno, COUNT(Course), AVG(Grade) FROM SC WHERE Grade IS NOT NULL GROUP BY Sno
10)在S表中删除院系字段列
ALTER TABLE Student DROP COLUMN Sdept
综合应用题
某高校教务处教务管理需要如下信息:
教师:教师编号、姓名、性别、职务、职称、电话、E-mail 学生:学号、姓名、性别、年龄、所学专业、籍贯 课程:课程号、课程名、开课学期、所属类别 院系:系名、系主任、办公地点、办公电话
实体之间联系如下
1. 一个系可以有多个学生,一个学生可选修多门课程,而一门课程可以为多个学生选修; 2. 一个系可以有多个教师,一个教师只能在一个系工作 3. 一个教师可以讲授多门课程,一门课程可以为多个教师讲授
1)根据院系、教师、课程、学生等实体,设计该教务管理系统局部E-R模型;
2)将E-R图转换为关系模型结构,并用下划线标明各个关系中的主关键字;
教师(教师编号,姓名,性别,职务,职称,电话,E-mail) 学生(学号,姓名,性别,年龄,所学专业,籍贯) 课程(课程号,课程名,开课学期,所属类别) 院系(系名,系主任,办公地点,办公电话) 选课(学号,课程号,成绩,学分)
学而不思则罔,思而不学则殆!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具