数据库习题答案--何玉洁
发布时间:2020-03-22 10:29:11
发布时间:2020-03-22 10:29:11
第一部分 基础理论
第1章 数据库概述
1.试说明数据、数据库、数据库管理系统和数据库系统的概念。
数据:描述事务的符号记录
数据库:存储数据的仓库
数据库管理系统:用于管理和维护数据的系统软件
数据库系统:计算机中引入数据库后的系统,包括数据库,数据库管理系统,应用程序,数据库管理员
2.数据管理技术的发展主要经历了哪几个阶段?
两个阶段,文件管理和数据库管理
3.数据独立性指的是什么?
应用程序不因数据的物理表示方式和访问技术改变而改变,分为逻辑独立性和物理独立性。物理独立性是指当数据的存储结构或存储位置发生变化时,不影响应用程序的特性;逻辑独立性是指当表达现实世界的信息内容发生变化时,不影响应用程序的特性。
4.数据库系统由哪几部分组成?
由数据库、数据库管理系统、应用程序、数据库管理员组成。
第2章 数据模型与数据库系统的结构
1.说明实体一联系模型中的实体、属性和联系的概念。
实体是具有公共性质的并可相互区分的现实世界对象的集合。属性是实体所具有的特征或性质。联系是实体之间的关联关系。
2.数据库系统包含哪三级模式?试分别说明每一级模式的作用。
外模式、模式和内模式。
外模式:是对现实系统中用户感兴趣的整体数据结构的局部描述,用于满足不同用户对数据的需求,保证数据安全。
模式:是数据库中全体数据的逻辑结构和特征的描述,它满足所有用户对数据的需求。
内模式:是对整个数据库的底层表示,它描述了数据的存储结构。
3.数据库管理系统提供的两级映像的作用是什么?它带来了哪些功能?
两级映像是外模式/模式映像和模式/内模式映像。外模式/模式映像保证了当模式发生变化时可以保证外模式不变,从而使用户的应用程序不需要修改,保证了程序与数据的逻辑独立性。模式/内模式映像保证了当内模式发生变化,比如存储位置或存储文件名改变,可以保持模式不变,保证了程序与数据的物理独立性。两级印象保证了应用程序的稳定性。
第3章 关系数据库
1.试述关系模型的三个组成部分。
数据结构、关系操作集合、关系完整性约束
2.解释下列术语的含义:
(1)主码当一个关系有多个候选码时,选择一个作为主码
(2)候选码当一个属性或属性集的值能够唯一标识一个关系的元组,而又不包含多余的元素,则称该属性或属性集为候选码。
(3)外码设 F是关系R的一个或一组属性,但不是关系R的主码,如果F与关系S的主码相对应,则称F是关系R的外码。
(4)关系
(5)关系模式二维表的结构
3.关系数据库的三个完整性约束是什么?各是什么含义?
实体完整性:关系数据库中每个关系都必须有主码,且主码值不能为空,不能重复。
参照完整性:指多个实体或表之间的关联关系,规则是外码或者值为空,或者等于所参照关系的主码值。
用户定义完整性:指明关系中属性的取值范围。
4.连接运算有哪些?等值连接和自然连接的区别是什么?
等值连接,自然连接
区别:
1.自然连接要求相等的分量必须有相同的属性名,等值连接不要求
2.自然连接要求把重复的属性名去掉,等值连接不要求。
第4章 SQL语言基础及数据定义功能
1.数据完整性的含义是什么?
指数据的正确性和相容性。
2.写出创建如下表的SQL语句,要求在定义表的同时定义数据的完整性约束:
(1)“图书表”结构如下:
书号:统一字符编码定长类型,长度为6,主码;
书名:统一字符编码可变长类型,长度为30,非空;
第一作者:普通编码定长字符类型,长度为10,非空;
出版日期:小日期时间型,
价格:定点小数,小数部分1位,整数部分3位。
Create table book(
bno nchar(6) primary key,
bname nvarchar(30) not null,
fauther char(10) not null,
date smalldatetime,
price numeric(4,1)
)
第5章 数据操作语句
利用定义的Student、Course和SC表结构实现如下操作,并根据表提供的数据观察各语句执行情况。
Student表:
列名 | 数据类型 | 约束 |
Sno | 普遍编码定长字符串,长度为7 | 主码 |
Sname | 普遍编码定长字符串,长度为10 | 非空 |
Ssex | 普遍编码定长字符串,长度为2 | |
Sage | 整型 | |
Sdept | 普遍编码定长字符串,长度为20 | |
Course表
列名 | 数据类型 | 约束 |
Cno | 普遍编码定长字符串,长度为6 | 主码 |
Cname | 普遍编码定长字符串,长度为20 | 非空 |
Credit | 整型 | |
Semster | 整型 | |
Cno | cname | credit | semester |
c01 | 计算机文化学 | 3 | 1 |
c02 | VB | 2 | 3 |
c03 | 计算机网络 | 4 | 7 |
c04 | 数据库基础 | 5 | 6 |
c05 | 高等数学 | 8 | 2 |
c06 | 数据结构 | 5 | 4 |
SC表:
列名 | 数据类型 | 约束 |
Sno | 普遍编码定长字符串,长度为7 | 主码,引用Student的外码 |
Cno | 普遍编码定长字符串,长度为6 | 主码,引用Course的外码 |
Grade | 整型 | |
1.查询学生选课表中的全部数据。
Select * from student
2.查询计算机系学生的姓名、年龄。
Select sname , sage from student where sdept =’计算机系’
3.查询成绩在70~80的学生的学号、课程号和成绩。
Select sno, cno, grade from sc where grade between 70 and 80
4.计算机系年龄在18~20的男生的姓名、年龄。
Select sname, sage from student where sdept=’计算机系’ and sage between 18 and 20 and ssex=’男’
5.查询“c01”课程的最高成绩。
Select max(grade) from sc where cno=’c01’
6.查询计算机系学生的最大年龄和最小年龄。
select max(sage), min(sage) from s where sdept=’计算机系’
7.统计每个系的学生人数。
select sdept, count(*) from s group by sdept
8.统计每门课程的选课人数和考试最高分。
Select cno, count(sno), max(grade) from sc group by cno
9.统计每个学生的选课门数和考试总成绩,并按选课门数升序显示结果。
Select sno, count(cno) 选课门数, sum(grade) 考试总成绩 from s
group by sno
order by 选课门数 asc
10.查询总成绩超过200分的学生,要求列出学号、总成绩。
Select sno, sum(grade) from sc group by sno having sum(grade)>200
11.查询选修了“c02”课程的学生的姓名和所在系。
Select s.sname, sdept from student s join sc on s.sno=sc.sno
12.查询成绩80分以上的学生的姓名、选的课程号和成绩,并按成绩降序排列结果。
Select sname, cno, grade from student s join sc on s.sno=sc.sno where grade >80 order by grade desc
13.查询哪些学生没有选课,要求列出学号、姓名和所在系。
Select sno, sname, sdept from s join sc on s.sno=sc.sno where cno is null
14.查询与VB在同一学期开设的课程的课程名和开课学期。
Select c2.cname, c2.credit from course c1 join course c2 on c1.credit=c2.credit where c1.cname=’VB’ and c2.cname != ’VB’
15.查询与李勇年龄相同的学生的姓名、所在系和年龄。
Select s2.sname, s2.sdept, s2.sage from student s1 join student s2 on s1.sage=s2.sage where s1.sname = ’李勇’ and s2.sname != ‘李勇’
16.查询计算机系年龄最小的2名学生的姓名和年龄。
Select top 2 with ties sname, sage from s where sdept = ‘计算机系’ order by sage asc
17.查询VB考试成绩最高的前2名学生的姓名、所在系和VB成绩,包括并列的情况。
18.查询选课门数最多的前2名学生的学号和选课门数,包括并列的情况。
19.查询学生人数最多的系,列出系名和人数。
20.用子查询实现如下查询:
(l)查询选修了“c01”课程的学生姓名和所在系。
Select sname,sdept from student
Where sno in (select sno from sc where cno = ‘C01’)
(2)查询数学系成绩80分以上的学生的学号、姓名、选的课程号和成绩。
Select sno,sname,cno,grade from student join sc on s.sno=sc.sno
Where sdept =‘数学系’ and sno in (
Select sno from sc where grade > 80)
(3)查询计算机系考试成绩最高的孛学生的姓名。
Select sname from student s join sc on s.sno = sc.sno
Where sdept = ‘计算机系’ and grade = (
Select max(grade) from sc join student s on s.sno=sc.sno
Where sdept = ‘计算机系’)
21.创建一个新表,表名为test_t,其结构为(COLI,COL2,COL3),其中:
COL1:整型,允许空值。
COL2:字符型,长度为10,不允许空值。
COL3:字符型,长度为10,允许空值。
试写出按行插入如下数据的语句(空白处表示空值)。
COL1 | COL2 | COL3 |
| B1 |
|
1 | B2 | C2 |
2 | B3 |
|
Create table test_t(
COL1 int,
COL2 char(10) not null,
COL3 char(10))
Insert into test_t(COL2) values(’B1’)
Insert into test_t(COL1,COL2) values(1,’B2’)
Insert into test_t values(2,’B3’,NULL)
22.删除考试成绩低于50分的学生的该门课程的选课记录。
Delete from sc where grade < 50
22.删除没有人选的课程记录。
Delete from course where cno not in(
Select cno from course)
23.删除计算机系VB成绩不及格学生的VB选课记录。
Delete from sc
From sc join student s on s.sno = sc.sno
Join course c on c.cno = sc.cno
where cname = ‘VB’ and grade < 60
and sdept = ‘计算机系’
24.删除VB考试成绩最低的学生的VB选课记录。
Delete from sc
From sc join student s on s.sno = sc.sno
Join course c on c.cno = sc.cno
where cname = ‘VB’and grade = (
select min(grade) from sc join student on sc.sno=s.sno
where cname = ‘VB’ )
25.将第2学期开设的所有课程的学分增加2分。
26.将VB课程的学分改为3分。
27.将计算机系学生的年龄增加1岁。
28.将信息系学生的“计算机文化学’课程的考试成绩加5分。
Update sc set grade = grade + 5
Where sno in(select sno from student where sdept = ‘信息系’)
And cno in(select cno from course where cname = ‘计算机文化学’)
29.将选课人数最少的课程的学分降低1分。
第6章 索引和视图
1.索引的作用是什么?
加快数据的查询速度,即使对数据的查找不需要对整个表进行扫描,就可以在其中找到所需数据。
2.索引分为哪几种类型?分别是什么?它们的主要区别是什么?
聚集索引、非聚集索引
区别:
聚集索引将数据按照索引项的顺序进行物理排序,非聚集索引不对数据进行物理排序。
非聚集索引的叶级结点不是存放数据的数据页。
3.不管对表进行什么类型的操作,在表上建立的索引越多越能提高操作效率,对吗?错,频繁进行数据操作的表,不要建立太多的索引,因为在表上建立的每个索引都会增加存储开销,索引对于插入、删除、更新操作也会增加处理上的开销。
4.经常对表进行哪类操作适合建立索引?适合在哪些列上建立索引?
经常与其他表进行连接的表适合建立索引。
1、表的主键、外键必须有索引;
2、数据量超过300的表应该有索引;
3、经常与其他表进行连接的表,在连接字段上应该建立索引;
4、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;
5、索引应该建在选择性高的字段上;
6、索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引。
5.使用第5章建立的Student、Course和SC表,:写出实现下列操作的SQL语句。
(1)在Student表上为Sname列建立一个聚集索引,索引名为:Sldx。
Create clustered index sldx on student(sname)
(2)在Course表上为Cname列建立一个唯一的非聚集索引,索引名为:CNIdx
Create unique nonclustered index CNldx on course(cname)
(3)在SC表上为Sno和Cno建立一个组合的聚集索引,索引名为:SnoCnoldx。
Create clustered index SnoCnoldx on sc (sno, cno)
6.使用第4章建立的Student、Course和SC表,写出创建满足下述要求的视图的SQL语句。
(1)查询学生的学号、姓名、所在系、课程号、课程名、课程学分。
Create view v1
as
Select s.sno, sname, sdept, cno, cname, credit from student s join sc on s.sno=sc.sno
Join course c on sc.cno=c.cno
(2)查询学生的学号、,姓名、选修的课程名和考试成绩。
Create view v2 As
Select s.sno,sname,cname,grade
From student s join sc on s.sno = sc.sno
Join course c on c.cno = sc.cno
(3)统计每个学生的选课门数,要求列出学生学号和选课门数。
Create view v3 As
Select sno,count(*) as total
From sc group by sno
(4)统计每个学生的修课总学分,要求列出学生学号和总学分(说明:考试成绩大于等于60分才可获得此门课程的学分)。
Create view v4
As
Select sno, sum(credit) from sc Join course c on sc.cno=c.cno
Where grade>=60
Group by sno
7.利用第6题建立的视图,完成如下查询:
(1)查询考试成绩大于等于90分的学生的姓名、课程名和成绩。
Select sname,cname,grade From v2 where grade >= 90
(2)查询选课门数超过3门的学生的学号和选课门数。
Select * from v3 where total >= 3
(3)查询计算机系选课门数超过3门的学生的姓名和选课门数。
Select sname,total from v3 join student s on s.sno = v3.sno
Where sdept = ‘计算机系’ and total >= 3
(4)查询修课总学分超过10分的学生的学号、姓名、所在系和修课总学分。
Select v4.sno,sname,sdept,total_credit
From v4 join student s on s.sno = v4.sno
Where total_credit >= 10
(5)查询年龄大于等于20的学生中,修课总学分超过10分的学生的姓名、年龄、所在系和修课总学分。
Select sname,sage,sdept,total_credit
From v4 join student s on s.sno = v4.sno
Where sage >= 20 and total_credit >= 10
8.修改6题(4)定义的视图,使其查询每个学生的学号、总学分以及总的选课门数。
alter view v1
As
Select sno, sum(credit), count(*) from sc Join course c on sc.cno=c.cno
Group by sno
第7章 关系数据库规范化理论
1.关系规范化中的操作异常有哪些?它是由什么引起的?解决的办法是什么?
主要有插入异常、删除异常和修改异常,这些都是由数据冗余引起的,解决的办法是进行模式分解,消除数据冗余。
2.第一范式、第二范式和第三范式关系的定义分别是什么?
第一范式:不包含重复组的关系(即不包含非原子项的属性)是第一范式的关系。
第二范式:如果R(U,F)∈1NF,并且R中的每个非主属性都完全函数依赖于主码,则R(U,F)∈2NF。
第三范式:如果R(U,F)∈2NF,并且所有的非主属性都不传递依赖于主码,则R(U,F)∈3NF。
3.什么是部分依赖?什么是传递依赖?请举例说明。
部分函数依赖:如果X→Y,并且对于X的一个任意真子集X’有X’→Y成立,则称Y部分函数依赖于X。
传递函数依赖:如果X→Y、Y→Z,则称Z传递函数依赖于X
4.设有关系模式:学生修课(学号,姓名,所在系,性别,课程号,课程名,学分,成绩)。设一个学生可以选多门课程,一门课程可以被多名学生选。一个学生有唯一的所在系,每门课程有唯一的课程名和学分。请指出此关系模式的候选码,判断此关系模式是第几范式的,若不是第三范式的,请将其规范化为第三范式关系模式,并指出分解后的每个关系模式的主码和外码。
候选码:(sno, cno)
为第一范式(1NF)
第三范式:
学生(Sno, sname, sdept, ssex) sno为主码
课程(Cno, cname, credit) cno为主码
考试(Sno,cno, grade) (sno, cno)为主码,sno为引用学生的外码,cno为引用课程的外码
第8章 数据库设计
1.简述数据库的设计过程。
数据库设计一般包含如下过程:
需求分析。
结构设计,包括概念结构设计、逻辑结构设计和物理结构设计。
行为设计,包括功能设计、事务设计和程序设计。
数据库实施,包括加载数据库数据和调试运行应用程序。
数据库运行和维护阶段。
2.把E-R模型转换为关系模式的转换规则有哪些?
转换的一般规则如下:
一个实体转换为一个关系模式。实体的属性就是关系的属性,实体的码就是关系的主键。
对于实体间的联系有以下不同的情况:
(1)1∶1联系一般是将联系与任意一端实体所对应的关系模式合并,即在一个实体的关系模式的属性中加入另一个实体的码和联系本身的属性。
(2)1∶n联系一般与n端所对应的关系模式合并,即在n端对应的关系模式中加入1端实体的码以及联系本身的属性。
(3)m∶n联系必须转换为一个独立的关系模式。与该联系相连的各实体的码以及联系本身的属性均转换为此关系模式的属性,且关系模式的主键包含各实体的码。
(4)有相同主码的关系模式可以合并。
3.在图书借阅管理系统中,一位读者可以编写多本图书,一本图书也可以借给多个读者。设读者的属性有:读者编号、读者姓名、单位、电话;图书的属性有:书号、书名、出版社、日期。读者借阅图书时,应记录借书日期和还书日期。试完成以下两题:
⑴根据这段话的意思,画出其E-R图。
⑵将这个E-R图转换为关系模式,并给出各关系模式中的主码。
图书(书号,书名,日期,出版社)
读者(读者编号,读者姓名,电话,单位)
借阅(书号,读者编号,借书日期,还书日期)书号为引用图书的外键,读者编号为引用读者的外键。
第9章 事务与并发控制
1.试说明事务的概念及4个特征。
事务是用户定义的数据操作系列,这些操作作为一个完整的工作单元,一个事务内的所有语句被作为一个整体,要么全部执行,要么全部不执行
事务的4个特征:原子性,一致性,隔离性,持久性
2.并发控制的措施是什么?
使用封锁机制,即加锁。
3.什么是死锁?预防死锁有哪些方法?
两个事务相互等待对方先释放资源,则会造成死锁
预防死锁:一次封锁法,顺序封锁法
一次封锁法:每个事务一次将所有要使用的数据全部加锁。
顺序封锁法:预先对数据对象规定一个封锁顺序,所有事务都按这个顺序封锁。