数据库原理及应用(第2版)习题参考答案

更新时间:2024-04-28 07:56:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第1章 数据概述 一.选择题

1.下列关于数据库管理系统的说法,错误的是 C

A.数据库管理系统与操作系统有关,操作系统的类型决定了能够运行的数据库管理系统的类型 B.数据库管理系统对数据库文件的访问必须经过操作系统实现才能实现 C.数据库应用程序可以不经过数据库管理系统而直接读取数据库文件 D.数据库管理系统对用户隐藏了数据库文件的存放位置和文件名 2.下列关于用文件管理数据的说法,错误的是 D A.用文件管理数据,难以提供应用程序对数据的独立性

B.当存储数据的文件名发生变化时,必须修改访问数据文件的应用程序 C.用文件存储数据的方式难以实现数据访问的安全控制

·1· D.将相关的数据存储在一个文件中,有利于用户对数据进行分类,因此也可以加快用户操作数据的效率 3.下列说法中,不属于数据库管理系统特征的是 C A.提供了应用程序和数据的独立性

B.所有的数据作为一个整体考虑,因此是相互关联的数据的集合 C.用户访问数据时,需要知道存储数据的文件的物理信息

D.能够保证数据库数据的可靠性,即使在存储数据的硬盘出现故障时,也能防止数据丢失 5.在数据库系统中,数据库管理系统和操作系统之间的关系是 D A.相互调用

B.数据库管理系统调用操作系统 C.操作系统调用数据库管理系统 D.并发运行

6.数据库系统的物理独立性是指 D A.不会因为数据的变化而影响应用程序 B.不会因为数据存储结构的变化而影响应用程序 C.不会因为数据存储策略的变化而影响数据的存储结构 D.不会因为数据逻辑结构的变化而影响应用程序

7.数据库管理系统是数据库系统的核心,它负责有效地组织、存储和管理数据,它位于用户和操作系统之间,属于 A

A.系统软件 C.应用软件

B.工具软件 D.数据软件

8.数据库系统是由若干部分组成的。下列不属于数据库系统组成部分的是 B A.数据库 C.应用程序

B.操作系统

D.数据库管理系统

9.下列关于客户/服务器结构和文件服务器结构的描述,错误的是 D

A.客户/服务器结构将数据库存储在服务器端,文件服务器结构将数据存储在客户端

B.客户/服务器结构返回给客户端的是处理后的结果数据,文件服务器结构返回给客户端的是包含客户所需数据

的文件

C.客户/服务器结构比文件服务器结构的网络开销小

D.客户/服务器结构可以提供数据共享功能,而用文件服务器结构存储的数据不能共享

1

·2· 数据库是相互关联的数据的集合,它用综合的方法组织数据,具有较小的数据冗余,可供多个用户共享,具有

较高的数据独立性,具有安全控制机制,能够保证数据的安全、可靠,允许并发地使用数据库,能有效、及时地处理数据,并能保证数据的一致性和完整性。

10.下列关于数据库技术的描述,错误的是 B

A.数据库中不但需要保存数据,而且还需要保存数据之间的关联关系

B.由于数据是存储在磁盘上的,因此用户在访问数据库数据时需要知道数据的存储位置 C.数据库中数据存储结构的变化不会影响到应用程序 D. 数据库中的数据具有较小的数据冗余

二.填空题

1.数据管理的发展主要经历了_______和_______两个阶段。文件管理 数据库管理 2.在利用数据库技术管理数据时,所有的数据都被_______统一管理。数据库管理系统

3.数据库管理系统提供的两个数据独立性是_______独立性和_______独立性。 物理 逻辑 4.数据库系统能够保证进入到数据库中的数据都是正确的数据,该特征称为_______。数据完整性 5.在客户/服务器结构中,数据的处理是在________端完成的。 服务器

6.数据库系统就是基于数据库的计算机应用系统,它主要由________、________和________三部分组成。 据库、数据库管理系统和应用程序

7.与用数据库技术管理数据相比,文件管理系统的数据共享性________,数据独立性________。 差 低

8.在数据库技术中,当表达现实世界的信息内容发生变化时,可以保证不影响应用程序,这个特性称为______。 逻辑独立性

9.当数据库数据由于机器硬件故障而遭到破坏时,数据库管理系统提供了将数据库恢复到正确状态,并尽可能使数据不丢失的功能,这是数据库管理系统的______特性保证的。

可靠性

10.数据库中的数据是相互关联的数据集合,具有较小的数据冗余,可供多个用户共享,具有较高的数据独立性,且具有安全性和可靠性,这些特征都是由______保证的。 数据库管理系统

2

第2章 数据模型与数据库系统结构 一.选择题

1.数据库三级模式结构的划分,有利于

A. 数据的独立性 C. 建立数据库

A

·3· B. 管理数据库文件 D. 操作系统管理数据库

B

2.在数据库的三级模式中,描述数据库中全体数据的逻辑结构和特征的是

A.内模式 B.模式 C. 外模式

D. 其他

3.数据库系统中将数据分为三个模式,从而提供了数据的独立性,下列关于数据逻辑独立性的说法,正确的是

A. B. C. D.

C

当内模式发生变化时,模式可以不变 当内模式发生变化时,应用程序可以不变 当模式发生变化时,应用程序可以不变 当模式发生变化时,内模式可以不变

4.为最大限度地保证数据库数据的正确性,关系数据库实现了三个完整性约束,下列用于保证实体完整性的是

B

B.主码

C. CHECK约束

D

D. UNIQUE约束

A. 外码

5.下列关于关系中主属性的描述,错误的是

A. 主码所包含的属性一定是主属性 B. 外码所引用的属性一定是主属性 C. 候选码所包含的属性都是主属性

D. 任何一个主属性都可以唯一地标识表中的一行数据

6.设有关系模式销售(顾客号,商品号,销售时间,销售数量),若允许一个顾客在不同时间对同一个产品购买多

次,则此关系模式的主码是 A.顾客号

C.(顾客号,商品号)

D

B.产品号

D.(顾客号、商品号、销售时间)

B

7.关系数据库用二维表来存储数据。下列关于关系表中记录的说法,正确的是

A.顺序很重要,不能交换 C.按输入数据的顺序排列

B.顺序不重要 D.一定是有序的

C

8.下列模式中,用于描述单个用户数据视图的是

A.内模式 C.外模式

B.概念模式 D.存储模式

9.在利用概念层数据模型描述数据时,一般要求模型要满足三个要求。下列描述中,不属于概念层数据模型应满足的要求的是

A

B.能够真实地模拟现实世界 D.能够方便地在计算机上实现

A.能够描述并发数据

C.容易被业务人员理解

B

10.数据模型三要素是指

A.数据结构、数据对象和数据共享

3

·4· B.数据结构、数据操作和数据完整性约束

C.数据结构、数据操作和数据的安全控制 D.数据结构、数据操作和数据的可靠性

11.下列关于实体联系模型中联系的说法,错误的是 D

A.一个联系可以只与一个实体有关 B.一个联系可以与两个实体有关 C.一个联系可以与多个实体有关 D.一个联系也可以不与任何实体有关

12.数据库系统中的三级模式以及模式间的映像提供了数据的独立性。下列关于两级映像的说法,正确的是

C

A.外模式到模式的映像是由应用程序实现的,模式到内模式的映像是由DBMS实现的 B.外模式到模式的映像是由DBMS实现的,模式到内模式的映像是由应用程序实现的 C.外模式到模式的映像以及模式到内模式的映像都是由DBMS实现的 D.外模式到模式的映像以及模式到内模式的映像都是由应用程序实现的

D

13.下列不属于数据完整性约束的是

A.实体完整性 C.域完整性

B.参照完整性

D.数据操作完整性

A

14.下列关于关系操作的说法,正确的是

A.关系操作是非过程化的

B.在进行关系操作时,用户需要知道数据的存储位置 C.在进行关系操作时,用户需要知道数据的存储结构 D.用户可以在关系上直接进行行定位操作 14.下列关于概念层数据模型的说法,错误的是

C

A.概念层数据模型应该采用易于用户理解的表达方式 B.概念层数据模型应该比较易于转换成组织层数据模型

C.在进行概念层数据模型设计时,需要考虑具体的DBMS的特点 D.在进行概念层数据模型设计时,重点考虑的内容是用户的业务逻辑

15.下列关于外码的说法,正确的是

A.外码必须与其所引用的主码同名 B.外码列不允许有空值

C

C.外码和所引用的主码名字可以不同,但语义必须相同 D.外码的取值必须要与所引用关系中主码的某个值相同

16.下列关于关系的说法,错误的是

二.填空题

D

A.关系中的每个属性都是不可再分的基本属性 B.关系中不允许出现值完全相同的元组 C.关系中不需要考虑元组的先后顺序

D.关系中属性顺序的不同,关系所表达的语义也不同

1.数据库可以最大限度地保证数据的正确性,这在数据库中被称为______。 数据完整性 2.实体-联系模型主要包含______、______和______三部分内容。实体 属性 联系

4

3.如果实体A与实体B是一对多联系,则实体B中的一个实例最多可对应实体A中的______实例。

一个

4.数据完整性约束包括______完整性、______完整性和______完整性。 实体 参照 用户定义 5.关系数据模型的组织形式是______。 二维表

6.数据库系统的______和______之间的映像,提供了数据的物理独立性。 7.数据的逻辑独立性是指当______变化时可以保持______不变。 内模式 模式

8.数据模型三要素包括______、______和______。 数据结构 数据操作 数据完整性约束 9.实体联系模型属于______层数据模型,它与具体的DBMS______。概念 无关 10.关系操作的特点是基于______的操作。 集合

·5· 11.当数据的物理存储位置发生变化时,通过调整______映像,可以保证______不变化,从而保证数据的物理独立性。 模式/内模式 模式

12.参照完整性约束是通过______保证的。 外码

5

·6· 第3章 SQL语言基础及数据定义功能 一.选择题

1.下列关于SQL语言特定的叙述,错误的是 B

A.使用SQL语言访问数据库,用户只需提出做什么,而无需描述如何实现 B.SQL语言比较复杂,因此在使用上比较难

C.SQL语言可以在数据库管理系统提供的应用程序中执行,也可以在DOS环境下执行 D.使用SQL语言可以完成任何数据库操作 2.下列所述功能中,不属于SQL语言功能的是 D A.数据库和表的定义功能 B.数据查询功能 C.数据增、删、改功能

D.提供方便的用户操作界面功能

3.设某职工表中有用于存放年龄(整数)的列,下列类型中最合适年龄列的是 C A.int C.tinyint

B.smallint D.bit

4.SQL Server数据库是由文件组成的。下列关于数据库所包含的文件的说法,正确的是 D A.一个数据库可包含多个主数据文件和多个日志文件 B.一个数据库只能包含一个主数据文件和一个日志文件

C.一个数据库可包含多个次要数据文件,但只能包含一个日志文件 D.一个数据库可包含多个次要数据文件和多个日志文件

5.在SQL Server中创建用户数据库,其主数据文件的大小必须大于 B A.master数据库的大小 C.msdb数据库的大小

B.model数据库的大小 D.3MB

6.在SQL Server系统数据库中,存放用户数据库公共信息的是 D A.master

C.msdb数据库的大小

B.model D.tempdb

7.在SQL Server中创建用户数据库实际就是定义数据库所包含的文件以及文件的属性。下列不属于数据库文件属性的是 C A.初始大小 C.文件结构

B.物理文件名 D. 最大大小

8.在SQL Server中创建用户数据库实际就是定义数据库所包含的文件以及文件的属性。下列不属于数据库文件属性的是 C A.初始大小 C.文件结构

B.物理文件名 D. 最大大小

9.下列约束中用于限制列的取值范围的约束是 B A.PRIMARY KEY C.DEFAULT

B.CHECK D. UNIQUE

10.下列约束中用于限制列的取值不重的约束是 D A.PRIMARY KEY

B.CHECK 6

C.DEFAULT

D. UNIQUE

·7· 11.下列约束中用于实现实体完整性的约束是 A A.PRIMARY KEY C.DEFAULT

B.CHECK D. UNIQUE

12.下列关于DEFAULT约束的说法,错误的是 D A.一个DEFAULT约束只能约束表中的一个列 B.在一个表上可以定义多个DEFAULT约束 C.DEFAULT只能定义在列级完整性约束处

D.在列级完整性约束和表级完整性约束处都可以定义DEFAULT约束

7

·8· 第 4 章 数据操作语句 一. 选择题

1. 当关系R和S进行连接操作时,如果R中的元组不满足连接条件,在连接结果中也会将这些记录保留下来的操

作是 A A.左外连接 C.内连接 C

A.Grade IS NOT NULL C.Grade = NULL

B.Grade IS NULL D.NOT (Grade IS NULL) D

B.MAX(列名)

D.COUNT(*)

A

B.右外连接 D.自连接

2. 设在某SELECT语句的WHERE子句中,需要对Grade列的空值进行处理。下列关于空值的操作,错误的是

3. 下列聚合函数中,不忽略空值的是

A.SUM(列名) C.AVG(列名)

4.SELECT … INTO …FROM语句的功能是

A. 将查询结果插入到一个新表中 C. 合并查询的结果 D. 向已存在的表中添加数据 5.下列利用SC表的查询语句中,错误的是

B. 将查询结果插入到一个已建好的表中

B

A. SELECT Sno, COUNT(*) FROM SC GROUP BY Sno

B. SELECT Sno FROM SC GROUP BY Sno WHERE COUNT(*) > 3 C. SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(*) > 3 D. SELECT Sno FROM SC GROUP BY Sno

6.现要利用Student表查询年龄最小的学生姓名和年龄。下列实现此功能的查询语句中,正确的是

A. SELECT Sname, MIN(Sage) FROM Student

B. SELECT Sname, Sage FROM Student WHERE Sage = MIN(Sage) C. SELECT TOP 1 Sname, Sage FROM Student

D. SELECT TOP 1 Sname, Sage FROM Student ORDER BY Sage

7.设SC表中记录成绩的列为:Grade,类型为int。若在查询成绩时,希望将成绩按‘优’、‘良’、‘中’、‘及格’和‘不及格’形式显示,正确的Case函数是

A.

Case Grade

When 90~100 THEN '优' When 80~89 THEN '良' When 70~79 THEN '中' When 60~69 THEN '及格' Else '不及格' End B.

Case

When Grade between 90 and 100 THEN Grade = '优' When Grade between 80 and 89 THEN Grade = '良'

8

C

D

When Grade between 70 and 79 THEN Grade = '中' When Grade between 60 and 69 THEN Grade = '及格' Else Grade = '不及格' End C.

Case

When Grade between 90 and 100 THEN '优' When Grade between 80 and 89 THEN '良' When Grade between 70 and 79 THEN '中' When Grade between 60 and 69 THEN '及格' Else '不及格' End D.

Case Grade

When 90~100 THEN Grade = '优' When 80~89 THEN Grade = '良' When 70~79 THEN Grade = '中' When 60~69 THEN Grade = '及格' Else Grade = '不及格'

End

8.下述语句的功能是将两个查询结果合并为一个结果。其中正确的是 Order by sage Union

select sno,sname,sage from student where sdept = 'is' Order by sage

B.select sno,sname,sage from student where sdept = 'cs' Union

select sno,sname,sage from student where sdept = 'is' Order by sage

C.select sno,sname,sage from student where sdept = 'cs' Union

select sno,sname from student where sdept = 'is' Order by sage

D.select sno,sname,sage from student where sdept = 'cs' Order by sage Union

select sno,sname,sage from student where sdept = 'is' 9.下列SQL语句中,用于修改表数据的语句是

A.ALTER C.UPDATE

C

B.SELECT D.INSERT

B

·9· A.select sno,sname,sage from student where sdept = 'cs'

10.设有Teachers表,该表的定义如下:

CREATE TABLE Teachers( Tno CHAR(8) PRIMARY KEY,

Tname VARCHAR(10) NOT NULL,

9

·10· Age TINYINT CHECK(Age BETWEEN 25 AND 65) )

下列插入语句中,不能正确执行的是

D

A.INSERT INTO Teachers VALUES('T100','张鸿',NULL)

B.INSERT INTO Teachers(Tno,Tname,Age) VALUES('T100','张鸿',30) C.INSERT INTO Teachers(Tno,Tname) VALUES('T100','张鸿') D.INSERT INTO TeachersVALUES('T100','张鸿')

11.设数据库中已有表4-1至4-3所示的Student、Course和SC表。现要查询学生选的第2学期开设课程的情况,只需列出学号、姓名、所在系和所选的课程号。该查询涉及到的表是 D

A.仅Student表

C.仅Student和Course表

B.仅Student和SC表 D.Student、SC和Course表

12.删除计算机系学生(在student表中)的修课记录(在SC表中)的正确的语句是表是 B

A.DELETE FROM SC JOIN Student b ON S.Sno = b.Sno WHERE Sdept = '计算机系'

B.DELETE FROM SC FROM SC JOIN Student b ON SC.Sno = b.Sno WHERE Sdept = '计算机系'

C.DELETE FROM Student WHERE Sdept = '计算机系' D.DELETE FROM SC WHERE Sdept = '计算机系'

二. 填空题

1. 在相关子查询中,子查询的执行次数是由_________决定的。外层表的行数

2. 对包含基于集合测试子查询的查询语句,是先执行_________层查询,在执行_________层查询。内,外 3. 对包含相关子查询的查询语句,是先执行_________层查询,在执行_________层查询。外,内 4. 聚合函数COUNT(*)是按_________统计数据个数。行

5. 设Grade列目前有三个值:90、80和NULL,则AVG(Grade)的值是_________,MIN(Grade)的值是_________。

85,80

6. 设有学生表(学号,姓名,所在系)和选课表(学号,课程号,成绩),现要建立统计每个系的选课人数。请补

全下列语句: COUNT(DISTINCT 选课表.学号) SELECT 所在系, _________ FROM 选课表 JOIN 学生表 ON 选课表.学号 = 学生表.学号 GROUP BY 所在系

7. 设有选课表(学号,课程号,成绩),现要查询考试成绩最高的三个学生的学号、课程号和成绩,包括并列情况。

请补全下列语句: TOP 3 WITH TIES, ORDER BY 成绩 DESC SELECT _________ 学号,课程号,成绩 FROM 选课表 _________

8. UNION操作用于合并多个查询语句的结果,如果在合并结果时不希望去掉重复的数据,则在用UNION操作时

应使用_________关键字。 起别名

10. FROM A LEFT JOIN B ON …语句表示在连接结果中不限制_________表数据必须满足连接条件。 A 11. 对分组后的统计结果再进行筛选使用的子句是_________。HAVING

12. 若SELECT语句中同时包含WHERE子句和GROUP子句,则先执行的是_________子句。WHERE

三. 简答题 1.

在聚合函数中,哪个函数在统计时不考虑NULL。

10

ALL

9. 进行自连接操作的两个表在物理上为一张表。通过_________方法可将物理上的一张表在逻辑上成为两张表。

答:COUNT(*) 2. 3. 4.

WHERE Sdept NOT IN (‘CS’,’IS’,’MA’),查找的数据是什么? 5.

自连接与普通内连接的主要区别是什么? 6.

外连接与内连接的主要区别是什么? 7.

在使用UNION合并多个查询语句的结果时,对各个查询语句的要求是什么? 8.

相关子查询与嵌套子查询在执行方面的主要区别是什么? 答:各个查询语句的列个数必须相同,对应列的语义相同,类型兼容。

答:自连接中进行连接操作的表在物理上是一张表,而普通内连接进行连接的表在物理上是两张表。 答:查找‘CS’,’IS’,’MA’三个系之外的其他系

WHERE Age BETWEEN 20 AND 30子句,查找的Age范围是多少? 答:Age大于等于20并且小于等于30

在LIKE运算符中“%”的作用是什么? 答:匹配0个或多个字符。

·11· 答:进行外连接的两个表中,可以有一张表不满足连接条件,而进行内连接的两个表必须都满足连接条件。

答:相关子查询的执行过程是先外后内,而嵌套子查询的执行过程是先内后外。而且相关子查询中必须有与外层查询的关联,而嵌套子查询中,内、外层查询之间没有关联关系。

9.

执行SELECT … INOT 表名 FROM …语句时,对表名的要求是什么?

10. 对统计结果的筛选应该使用哪个子句完成? 答:使用HAVING子句

11. 在排序子句中,排序依据列的前后顺序是否重要?ORDER BY C1,C2子句对数据的排序顺序是什么? 答:重要,系统会按列的先后顺序进行排序。

先按C1列进行排序,在C1列值相同时再按C2列进行排序。

12. TOP 子句的作用是什么?

答:在查询结果产生后,提取结果的前若干行数据。

四.上机练习

1.查询学生选课表中的全部数据。 答:select * from SC

2.查询计算机系的学生的姓名、年龄。

答:select sname,sage from student where sdept = '计算机系'

3. 查询成绩在70~80分之间的学生的学号、课程号和成绩。

11

答:必须是一个不存在的新表名。

·12· 答:select sno,cno,grade from sc on 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. 查询“C001”号课程的最高分。

答:select max(grade) from sc where cno = 'C001'

6. 查询计算机系学生的最大年龄和最小年龄。

答:select max(sage) as max_age, min(sage) as min_age from student where sdept = '计算机系'

7. 统计每个系的学生人数。

答:select sdept,count(*) from student group by sdept

8. 统计每门课程的选课人数和考试最高分。

答:select cno, count(*),max(grade) from sc group by cno

9. 统计每个学生的选课门数和考试总成绩,并按选课门数升序显示结果。 答:select sno,count(*), sum(grade) from sc group by sno

order by count(*) asc

10. 查询总成绩超过200分的学生,要求列出学号和总成绩。 答:select sno,sum(grade) from sc group by sno

having sum(grade) > 200

11. 查询选课门数超过2门的学生的学号、平均成绩和选课门数。

答:select sno, avg(grade), count(*) from sc having count(*) > 2

12. 查询选了“C002”课程的学生的姓名和所在系。

答:select sname,sdept from student s join sc on s.sno = sc.sno where cno = 'C002'

13. 查询成绩80分以上的学生的姓名、课程号和成绩,并按成绩降序排列结果。

答:select sname,cno,grade from student s join sc on s.sno = sc.sno where grade > 80 order by grade desc

14. 查询计算机系男生修了“数据库基础”的学生的姓名、性别和成绩。

答:select sname,ssex,grade from student s join sc on s.sno = sc.sno join course c on c.cno = sc.cno

where sdept = '计算机系' and ssex = '男' and cname = '数据库基础'

15. 查询学生的选课情况,要求列出每位学生的选课情况(包括未选课的学生),并列出学生的学号、姓名、课程号

和考试成绩。

12

答:select s.sno,sname,cno,grade from student s

left join sc on s.sno = sc.sno

16. 查询哪些课程没有人选,要求列出课程号和课程名。

答:select c.cno,cname from course c left join sc on c.cno = sc.cno

where sc.cno is null

17.查询计算机系没有选课的学生,列出学生姓名。

答:select sname from student s left join sc on s.sno = sc.sno Where sdept = '计算机系' and sc.sno is null

18. 列出“数据库基础”课程考试成绩前三名的学生的学号、姓名、所在系和考试成绩。 答:select top 3 s.sno, sname, sdept, grade from Student s join SC on s.Sno = SC.Sno join Course c on c.Cno = SC.Cno where cname = '数据库基础' order by grade desc

19.查询VB考试成绩最低的学生的姓名、所在系和VB成绩。

答:select top 1 with ties sname,sdept,grade from student s join sc on s.sno = sc.sno join course c on c.cno = sc.cno where cname = 'VB' order by grade asc

·13· 20. 查询有考试成绩的所有学生的姓名、修课名称及考试成绩,要求将查询结果放在一张新的永久表中,假设新表

名为new_sc。

答:select sname, cname, grade into new_sc from student s join sc on s.sno = sc.sno join course c on c.cno = sc.cno where grade is not null

21. 分别查询信息管理系和计算机系的学生的姓名、性别、修课名称、修课成绩,并要求将这两个查询结果合并成

一个结果集,并以系名、姓名、性别、修课名称、修课成绩的顺序显示各列。

答:select sdept 系名, sname 姓名, ssex 性别, cname 修课名称, grade 修课成绩 from student s join sc on s.sno=sc.sno join course c on c.cno=sc.cno where sdept = '信息管理系'

UNION

select sdept , sname, ssex, cname, grade from student s join sc on s.sno=sc.sno join course c on c.cno=sc.cno where sdept = '计算机系'

22.查询选了VB的学生学号、姓名、所在系和成绩,并对所在系进行如下处理:

13

·14· 当所在系为“计算机系”时,显示“CS”; 当所在系为“信息管理系”时,显示“IS”; 当所在系为“通信工程系”时,显示“CO”;

对其他系,均显示“OTHER”。

答:select s.sno 学号,sname 姓名, case sdept when '计算机系' then 'CS' when '信息系' then 'IS' when '数学系' then 'CO' else 'OTHER'

end as 所在系,grade 成绩

from student s join sc on s.sno = sc.sno join course c on c.cno = sc.cno where cname = 'vb'

23. 用子查询实现如下查询:

(1)查询选了“C001”课程的学生姓名和所在系。

答:select sname,sdept from student where sno in( select sno from sc where cno = ' C001')

(2)查询通信工程系成绩80分以上的学生学号和姓名。 答:select sno,sname from student where sno in( select sno from sc where grade > 80) and sdept = '通信工程系'

(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 = '计算机系')

(4)查询年龄最大的男生的姓名和年龄。 答:select sname,sage from student

Where sage = (select max(sage) from student and ssex = '男') and ssex = '男'

(5)查询“C001”课程的考试成绩高于“C001”课程的平均成绩的学生的学号和“C001”课程成绩。 答:select sno,grade from sc where cno = ' C001'

And grade > (select avg(grade) from sc where cno = ' C001')

24. 创建一个新表,表名为test_t,其结构为:(COL1, COL 2, COL 3),其中:

COL1:整型,允许空值。

COL2:字符型,长度为10 ,不允许空值。 COL3:字符型,长度为10 ,允许空值。

试写出按行插入如下数据的语句(空白处表示空值)。

14

COL1 1 2 COL1 int,

COL2 char(10) not null, COL3 char(10) )

insert into test_t values(NULL, 'B1', NULL) insert into test_t values(1, 'B2', 'C2') insert into test_t(COL1, COL2) values(2, 'B3')

25. 将 “C001”课程的考试成绩加10分。

答:update sc set grade = grade + 10 where cno = 'C001'

B1 B2 B3 COL2 C2 COL3 ·15· 答:create table test_t (

26. 将计算机系所有选修了“计算机文化学”课程的学生成绩加10分,分别用子查询和多表连接形式实现。 答:(1)子查询

update sc set grade = grade + 10 where sno in(

select sno from student where sdept = '计算机系') and cno in(

select cno from course where cname = '计算机文化学')

(2)多表连接

update sc set grade = grade + 10

from sc join student s on sc.sno = s.sno join course c on c.cno = sc.cno

where sdept = '计算机系' and canem = '计算机文化学'

27. 删除修课成绩小于50分的学生的选课记录。 答:delete from sc where grade < 50

28. 删除信息管理系考试成绩小于50分的学生的该门课程的修课纪录,分别用子查询和多表连接形式实现。 答:(1) 用连接查询实现

delete from sc from sc join student s on s.sno=sc.sno where sdept = '信息管理系' and grade < 50 (2)用子查询实现

delete from sc where sno in (

select sno from student where sdept = '信息管理系' ) and grade < 50

29.删除VB考试成绩最低的学生的VB修课记录。 答:delete from sc

15

·16· where grade = (

select min(grade) from sc

join course c on c.cno = sc.cno where cname = 'vb') and cno in(

select cno from course where cname = 'vb')

16

第5章 视图和索引 一. 选择题

1.下列关于视图的说法,正确的是 B

A.视图与基本表一样,也存储数据

B.对视图的操作最终都转换为对基本表的操作 C.视图的数据源只能是基本表

D.所有视图都可以实现对数据的增、删、改、查操作 2.在视图的定义语句中,只能包含

A

A.数据查询语句 B.数据增、删、改语句 C.创建表的语句

D.全部都可以

3.视图对应数据库三级模式中的_________。

A. 外模式 B. 内模式 C. 模式 D. 其他

4.下列关于通过视图更新数据的说法,错误的是 A

A.如果视图的定义涉及到多张表,则对这种视图一般情况下允许进行更新操作 B.如果定义视图的查询语句中含有GROUP BY子句,则对这种视图不允许进行更新操作 C.如果定义视图的查询语句中含有统计函数,则对这种视图不允许进行更新操作 D.如果视图数据来自单个基本表的行、列选择结果,则一般情况下允许进行更新操作 5.下列关于视图的说法,正确的是

B

A.通过视图可以提高数据查询效率

B.视图提供了数据的逻辑独立性 C.视图只能建立在基本表上

D.定义视图的语句可以包含数据更改语句 6.创建视图的主要作用是

D

A.提高数据查询效率 B.维护数据的完整性约束 C.维护数据的一致性 D.提供用户视角的数据

7.建立索引可以加快数据的查询效率。在数据库的三级模式结构中,索引属于 A

A.内模式 B.模式 C.外模式

D.概念模式

8.设有学生表(学号,姓名,所在系)。下列建立统计每个系的学生人数的视图语句中,正确的是A.CREATE VIEW v1 AS

SELECT 所在系, COUNT(*) FROM 学生表 GROUP BY 所在系 B.CREATE VIEW v1 AS

SELECT 所在系, SUM(*) FROM 学生表 GROUP BY 所在系 C.CREATE VIEW v1(系名,人数) AS

SELECT 所在系, SUM(*) FROM 学生表 GROUP BY 所在系 D.CREATE VIEW v1(系名,人数) AS

SELECT 所在系, COUNT(*) FROM 学生表 GROUP BY 所在系

17

·17· D

·18·

A

9.设用户在某数据库中经常需要进行如下查询操作:

SELECT * FROM T WHERE C1=’A’ ORDER BY C2

设T表中已在C1列上建立了主码约束,且该表只建有该约束。为提高该查询的执行效率,下列方法中可行的是

C

A.在C1列上建立一个聚集索引,在C2列上建立一个非聚集索引 B.在C1和C2列上分别建立一个非聚集索引 C.在C2列上建立一个非聚集索引

D.在C1和C2列上建立一个组合的非聚集索引 10.下列关于索引的说法,正确的是

C

A.只要建立了索引就可以加快数据的查询效率

B.当一个表上需要创建聚集和非聚集索引时,应该先创建非聚集索引,然后再创建聚集索引,这种顺序会使创建索引的效率比较高

C.在一个表上可以建立多个唯一的非聚集索引

D.索引会影响数据插入和更新数据的执行效率,但不会影响删除数据的执行效率

11.下列关于CREATE UNIQUE INDEX IDX1 ON T(C1,C2)语句作用的说法,正确的是 D

A.在C1和C2列上分别建立一个唯一聚集索引 B.在C1和C2列上分别建立一个唯一非聚集索引 C.在C1和C2列的组合上建立一个唯一聚集索引 D.在C1和C2列的组合上建立一个唯一非聚集索引

二. 填空题

1.对视图的操作最终都转换为对_____操作。 基本表

2.视图是虚表,在数据库中只存储视图的_____,不存储视图的数据。 定义 3.修改视图定义的语句是_____。 ALTER VIEW 4.视图对应数据库三级模式中的_____模式。 外

5.在一个表上最多可以建立_____个聚集索引,可以建立_____个非聚集索引。 一 ,多

6.当在T表的C1列上建立聚集索引后,数据库管理系统会将T表数据按 _____ 列进行 _____。

C1 物理排序

7.索引建立的合适,可以加快数据_____操作的执行效率。 查询

8.在employees表的phone列上建立一个非聚集索引的SQL语句是_____

CREATE INDEX IDX1 ON employees(phone)

或:CREATE NONCLUSTERED INDEX IDX1 ON employees(phone)

9.设有student表,结构为Student(Sno,Sname,Sdept)。现要在该表上建立一个统计每个系的学生人数的视图,视图名为V_dept,视图结构为(系名,人数)。请补全下列定义该视图的SQL语句 V_dept (系名,人数) , GROUP BY Sdept CREATE VIEW _____ AS

SELECT Sdept, COUNT(*) _____

10.非聚集索引的B-树中,叶级节点中每个索引行由索引键值和_____组成。 行指示器

三. 简答题

18

1. 试说明使用视图的好处。

·19· 答:利用视图可以简化客户端的数据查询语句,使用户能从多角度看待同一数据,可以提高数据的安全性,视图对应数据库三级模式中的外模式,因此提供了一定程度的逻辑独立性。

2. 试说明哪类视图可实现更新数据的操作,哪类视图不可实现更新数据的操作。

答:一般只涉及到一张表的行列子集,且不含分组、统计计算等操作的视图是可更新数据的,其他情况一般都不能实现数据的更新操作。

3. 使用视图可以加快数据的查询速度,这句话对吗?为什么?

答:不对,因为通过视图查询数据时,比直接针对基本表查询数据多了一个转换过程,即从外模式到模式的转换。

4. 索引的作用是什么?

答:索引可以加快数据的查询效率。

5. 索引分为哪几种类型?分别是什么?它们的主要区别是什么

答:分为聚集索引和非聚集索引两种。聚集索引会对数据进行物理排序,非聚集索引不对数据进行物理排序。

6. 聚集索引一定是唯一性索引,对吗?反之呢? 答:不对。反之也不对。

7. 在建立聚集索引时,数据库管理系统首先要将数据按聚集索引列进行物理排序。对吗? 答:对。

8. 在建立非聚集索引时,数据库管理系统并不对数据进行物理排序。对吗? 答:对。

9. 不管对表进行什么类型的操作,在表上建立的索引越多越能提高操作效率。对吗? 10. 答:不对。

11. 适合建立索引的列是什么? 答:适合建立索引的情况:

? ? ? ?

四.上机练习

1. 写出创建满足下述要求的视图的SQL语句,并执行这些语句。将所写语句保存到一个文件中。 (1) 查询学生的学号、姓名、所在系、课程号、课程名、课程学分。 答:Create view v1 As

Select s.sno,sname,sdept,c.cno,cname,credit From student s join sc on s.sno = sc.sno Join course c on c.cno = sc.cno

(2) 查询学生的学号、姓名、选修的课程名和考试成绩。

19

包含大量非重复值的列。

在WHERE子句中经常用于进行BETWEEN AND、>、>=、< 和 <=等操作的列。 经常被用作连接操作的列。

ORDER BY或GROUP BY子句中涉及的列。

·20· 答: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) as total_credit From sno join course c on c.cno = sc.cno Where grade >= 60 Group by sno

2. 利用第1题建立的视图,写出完成如下查询的SQL语句,并执行这些语句,查看执行结果。将查询语句和执行

结果保存到一个文件中。

(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

3. 修改第1题(4)定义的视图,使其查询每个学生的学号、总学分以及总的选课门数。 答: Alter view v4 As

Select sno,sum(credit) as total_credit,count(*) as total_cno

From sc join course c on c.cno = sc.cno Group by sno

20

4. 写出实现下列操作的SQL语句,执行这些语句,并在SSMS工具中观察语句执行结果。 (1) 在Student表的Sdept列上建立一个按降序排序的非聚集索引,索引名为:Idx_Sdept。

答:Create index Idx_Sdept on student(Sdept DESC)

(2) 在Student表的Sname列上建立一个唯一的非聚集索引,索引名为:Idx_Sname。 答:Create unique index Idx_Sname on student(Sname)

(3) 在Course表上为Cname列建立一个非聚集索引,索引名为: Idx_Cname 答:Create index Idx_Cname on Course(Cname)

(4) 在SC表上为Sno和Cno建立一个组合的非聚集索引,索引名为:Idx_SnoCno。 答:Create index Idx_SnoCno on SC(Sno,Cno)

(5) 删除在Sname列上建立的Idx_Sname索引。 答:drop index Idx_Sname on Student

·21· 21

·22·

第6章 关系数据理论

一.选择题

1.对关系模式进行规范化的主要目的是

B

A.提高数据操作效率 B.维护数据的一致性

C.加强数据的安全性 D.为用户提供更快捷的数据操作

2.关系模式中的插入异常是指

D

A.插入的数据违反了实体完整性约束 B.插入的数据违反了用户定义的完整性约束 C.插入了不该插入的数据 D.应该被插入的数据不能被插入

3.如果有函数依赖X→Y,并且对X的任意真子集X’,都有X’

Y,则称 C

A.X完全函数依赖于Y B.X部分函数依赖于Y C.Y完全函数依赖于X

D.Y部分函数依赖于X

4.如果有函数依赖X→Y,并且对X的某个真子集X’,有X’→Y成立,则称 B

A.Y完全函数依赖于X B.Y部分函数依赖于X C.X完全函数依赖于Y

D.X部分函数依赖于Y

5.若X→Y和Y→Z在关系模式R上成立,则X→Z在R上也成立。该推理规则称为 C

A.自反规则 B.增广规则 C.传递规则

D.伪传递规则

6.若关系模式R中属性A仅出现在函数依赖的左部,则A为 A

A.L类属性 B.R类属性 C.N类属性

D.LR类属性

7.若关系模式R中属性A是N类属性,则A D

A.一定不包含在R任何候选码中 B.可能包含也可能不包含在R的候选码中 C.一定包含在R的某个候选码中 D.一定包含在R的任何候选码中

8.设F是某关系模式的极小函数依赖集。下列关于F的说法,错误的是

B

A.F中每个函数依赖的右部都必须是单个属性 B.F中每个函数依赖的左部都必须是单个属性 C.F中不能有冗余的函数依赖

D.F中每个函数依赖的左部不能有冗余属性

9.有关系模式:学生(学号,姓名,所在系,系主任),设一个系只有一个系主任,则该关系模式至少属于A.第一范式 B.第二范式 C.第三范式

D.BC范式

10.设有关系模式R(X, Y, Z),其F={Y→Z, Y→X, X→YZ},则该关系模式至少属于

D

A.第一范式

B.第二范式 22

B

C.第三范式

11.下列关于关系模式与范式的说法,错误的是

A.任何一个只包含两个属性的关系模式一定 B.任何一个只包含两个属性的关系模式一定 C.任何一个只包含两个属性的关系模式一定 D.任何一个只包含三个属性的关系模式一定

D.BC范式 D 属于3NF 属于BCNF 属于2NF 属于3NF

·23· 12.有关系模式:借书(书号,书名,库存量,读者号,借书日期,还书日期),设一个读者可以多次借阅同一本书,但对一种书(用书号唯一标识)不能同时借多本。该关系模式的主码是

A.(书号,读者号,借书日期) B. (书号)

二.填空题

1.在关系模式R中,若属性A只出现在函数依赖的右部,则A是_____类属性。 R 2.若关系模式R∈2NF,则R中一定不存在非主属性对主码的_____函数依赖。 部分 3.若关系模式R∈3NF,则R中一定不存在非主属性对主码的_____函数依赖。 传递

4.设有关系模式X(S, SN, D)和Y(D, DN, M),X的主码是S,Y的主码是D,则D在关系模式X中被称为_____。 外码

5.设有关系模式R(U, F),U={X, Y, Z, W},F={XY→Z, W→X},则(ZW)+ = _____,R的候选码为_____,该关系模式属于_____范式。XZW YW

第一

6.在关系模式R中,若属性A不在任何函数依赖中出现,则A是_____类属性。 N

7.在关系模式R中,若有X→Y,且Z?Y,则X→Z在R上也成立,该推理规则为Armstrong公理系统中的_____。分解规则

8.根据Armstrong公理系统中的自反规则,对关系模式R中的属性集X,若Y?X,则一定有_____。X→Y 9.关系数据库中的关系表至少都满足_____范式要求。 第一

10.关系规范化的过程是将关系模式从低范式规范化到高范式的过程,这个过程实际上是通过_____实现的。 模式分解

11. 若关系模式R的主码只包含一个属性,则R至少属于第_____范式。 二

12.若关系模式R中所有的非主属性都完全函数依赖于主码,则R至少属于第_____范式。 二

三.简答题

1. 关系规范化中的操作异常有哪些?它是由什么引起的?解决的办法是什么? 2.第一范式、第二范式和第三范式关系模式的定义分别是什么? 3.什么是部分函数依赖?什么是传递函数依赖?请举例说明。 4.第三范式的关系模式是否一定不包含部分函数依赖关系? 5.设有关系模式R(A, B, C, D),F={D→A, D→B} (1)求D。

(2)求R的全部候选码。 答:(1)D=DAB

(2)因为D是L类属性,因此D一定出现在R的任何候选码中; 因为C是N类属性,因此D一定出现在R的任何候选码中; (CD) = CDAB = R的全部属性,因此R的唯一候选码是CD。

6.设有关系模式R(W, X, Y, Z),F={X→Z, WX→Y},该关系模式属于第几范式,请说明理由。

解:R是1NF,R的候选码为WX,因此Y,Z是非主属性,又由于存在X→Z,因此F中存在非主属性对主码的部分函数

23

+

++

A

B.(书号,读者号) D.(读者号)

·24· 依赖,因此R不是2NF。

7.设有关系模式R(A, B, C, D),F = {A→C, C→A, B→AC, D→AC} (1)求B+,(AD)+。

(2)求R的全部候选码,判断R属于第几范式。 (3)求F的极小函数依赖集Fmin。 答:

(1) B+ = BAC

(AD)+ = ADC

(2) 由于B、D是L类属性,因此B、D会在任何候选码中;

(BD)+ = BDAC = R的全部属性,因此R的候选码是BD。 R是第1范式,因为存在部分函数依赖:

(3)① 将所有函数依赖的右边改为单个属性,得到:B→AC, D→AC

F1 = { A→C, C→A, B→A, B→C, D→A, D→C }

② 去掉函数依赖左部的多余属性:该关系模式的全部函数依赖集左部均为一个属性,因此不存在左部有多余

属性的情况。 ③ 去掉多余的函数依赖。

去掉A→C,得到F2 = { C→A, B→A, B→C, D→A, D→C }

A+F2 = AC,包含C,因此为多余函数依赖,应去掉;

去掉C→A,得到F3 = { B→A, B→C, D→A, D→C }

C+F3 = C,不包含A,因此C→A不是多余函数依赖;

去掉B→A,得到F4 = { C→A, B→C, D→A, D→C }

B+F4 = BCA,包含A,因此B→A是多余函数依赖,应去掉;

去掉B→C,得到F5 = { C→A, D→A, D→C }

B+F5 = B,不包含C,因此B→C不是多余函数依赖;

去掉D→A,得到F6 = { C→A, B→C, D→C }

D+F5 = DCA,不包含A,因此D→A是多余函数依赖,应去掉;

去掉D→C,得到F7 = { C→A, B→C }

D+F5 = D,不包含C,因此D→C不是多余函数依赖。

四. 设计题

1. 设有关系模式:学生修课(学号,姓名,所在系,性别,课程号,课程名,学分,成绩)。设一个学生可以选多

门课程,一门课程可以被多名学生选。一个学生有唯一的所在系,每门课程有唯一的课程名和学分。每个学生对每门课程有唯一的成绩。 (1) 请指出此关系模式的候选码。 (2) 写出该关系模式的极小函数依赖集。

(3) 该关系模式属于第几范式?并简单说明理由。

(4) 若不是第三范式的,请将其规范化为第三范式关系模式,并指出分解后的每个关系模式的主码和外码。 答:(1)候选码:(学号,课程号)

(2)学号→姓名,学号→所在系,学号→性别,课程号→课程名,课程号→学分, (学号,课程号)→成绩

(3)属于第二范式,因为存在部分函数依赖:学号→姓名。 (4)第三范式关系模式:

学生(学号,姓名,所在系,性别) 课程(课程号,课程名,学分)

24

最终Fmin ={C→A, B→C, D→C}

考试(学号,课程号,成绩),学号为引用学生的外码,课程号为引用课程的外码。

·25· 2. 设有关系模式:学生(学号,姓名,所在系,班号,班主任,系主任),其语义为:一个学生只在一个系的一个

班学习,一个系只有一个系主任,一个班只有一名班主任,一个系可以有多个班。 (1) 请指出此关系模式的候选码。 (2) 写出该关系模式的极小函数依赖集。

(3) 该关系模式属于第几范式?并简单说明理由。

(4) 若不是第三范式的,请将其规范化为第三范式关系模式,并指出分解后的每个关系模式的主码和外码。 解:(1)候选码:学号

(2)学号→姓名,学号→所在系,学号→班号,班号→班主任,所在系→系主任 (3)第二范式,因为有:学号→班号,班号→班主任,因此存在传递函数依赖:

学号

传递班主任

(4)第三范式关系模式:

学生(学号,姓名,所在系,班号),班号为引用班的外码,所在系为引用系的外码。 班(班号,班主任) 系(系名,系主任)

3. 设有关系模式:教师授课(课程号,课程名,学分,授课教师号,教师名,授课时数),其语义为:一门课程(由

课程号决定)有确定的课程名和学分,每名教师(由教师号决定)有确定的教师名,每门课程可以由多名教师讲授,每名教师也可以讲授多门课程,每名教师对每门课程有确定的授课时数。 (1) 指出此关系模式的候选码。 (2) 写出该关系模式的极小函数依赖集。 (3) 该关系模式属于第几范式?并简单说明理由

(4) 若不属于第三范式,请将其规范化为第三范式关系模式,并指出分解后的每个关系模式的主码和外码。 答:(1)候选码:(课程号,授课教师号)

(2)课程号→课程名,课程号→学分,授课教师号→教师名,(课程号,授课教师号)→授课时数 (3)属于第一范式。因为有:课程号→课程名,因此存在部分函数依赖关系:

(课程号,授课教师号)(4)第三范式关系模式:

课程(课程号,课程名,学分) 教师(教师号,教师名)

授课(课程号,教师号,授课时数),课程号为引用课程的外码,教师号为引用教师的外码。

P课程名

25

·31· 单位号电话办公地点设备处1拥有性别年龄m工人姓名 (c)

1管理m设备设备号名称规格工人编号规格设备价格m装配规格价格(d)

图7-28 各局部E-R图

答:分析:

设备号设备名零件数量零件号零件名 n零件① 工人实体可以与职工实体合并,将工人的属性合并到职工实体中,并在职工实体中增加“身份”属性,来

标识是工人还是其他职工。

② 设备处可合并到部门实体中,因设备处也是一个部门。可在实现时增加约束:只有设备处才能管理设备。 ③ 合并后的设备实体属性是图(c)和(d)中设备属性的并集。

合并后的结果:

31

·32· 职务性别年龄职工m属于联系电话办公地点1部门1管理设备号设备名规格价格

关系模式(主码用下划线标识)

部门(部门号,部门名,联系电话,办公地点)

职工编号姓名身份地址部门号部门名电话厂商号厂商m生产nm装配n零件厂商名生产日期零件号零件名规格m设备零件数量价格 职工(职工编号,姓名,身份,职务,性别,年龄,所属部门号),所属部门号为引用部门的外码 设备(设备号,设备名,规格,价格,被管部门号),被管部门号为引用部门的外码 零件(零件号,零件名,规格,价格) 厂商(厂商号,厂商名,地址,电话)

装配(设备号,零件号,零件数量),设备号为引用设备的外码,零件号为引用零件的外码 生产(厂商号,零件号,生产日期)或 生产(厂商号,零件号,生产日期)

32

第8章 事务与并发控制 一. 选择题

1. 如果事务T获得了数据项A上的排他锁,则其他事务对A D

A.只能读不能写

B.只能写不能读

C.可以写也可以读

D.不能读也不能写

·33· 2. 设事务T1和T2执行如图8-15所示的并发操作,这种并发操作存在的问题是 B

时间 ① ② 事务T1 读A=100,B=10 读A=100 A=A*2=200 写回A=200 ③ ④ 计算A+B 读A=100,B=10 验证A+B 图8-15 并发操作

A.丢失修改 C.读脏数据

B.不能重复读 D.产生幽灵数据

C

事务T2 3. 下列关于数据库死锁的说法,正确的是

A.死锁是数据库中不可判断的一种现象

B.在数据库中防止死锁的方法是禁止多个用户同时操作数据库 C.只有允许并发操作时,才有可能出现死锁 D.当两个或多个用户竞争相同资源时就会产生死锁 4. 下列不属于事务特征的是

A.完整性 C.隔离性

A B.一致性 D.原子性

A

5. 若事务T对数据项D已加了S锁,则其他事务对数据项D

A.可以加S锁,但不能加X锁 B.可以加X锁,但不能加S锁 C.可以加S锁,也可以加X锁 D.不能加任何锁

6. 在数据库管理系统的三级封锁协议中,二级封锁协议的加锁要求是 C

A.对读数据不加锁,对写数据在事务开始时加X锁,事务完成后释放X锁 B.读数据时加S锁,读完即释放S锁;写数据时加X锁,写完即释放X锁

C.读数据时加S锁,读完即释放S锁;对写数据是在事务开始时加X锁,事务完成后释放X锁 D.在事务开始时即对要读、写的数据加锁,等事务结束后再释放全部锁 7. 在数据库管理系统的三级封锁协议中,一级封锁协议能够解决的问题是

A.丢失修改 C.读脏数据

B.不可重复读 D.死锁

A

8. 若系统中存在4个等待事务T0、T1、T2和T3,其中T0正等待被T1锁住的数据项A1,T1正等待被T2锁住的数

33

·34· 据项A2,T2正等待被T3锁住的数据项A3, B

A.活锁 C.封锁

B.死锁 D.正常

T3正等待被T0锁住的数据项A0。则此时系统所处的状态是

9. 事务一旦提交,其对数据库中数据的修改就是永久的,以后的操作或故障不会对事务的操作结果产生任何影响。

这个特性是事务的 A.原子性 C. 隔离性

D

B.一致性

D.持久性

10. 在多个事务并发执行时,如果事务T1对数据项A的修改覆盖了事务T2对数据项A的修改,这种现象称为

A

A.丢失修改 C.不可重复读

B.读脏数据 D.数据不一致

11. 在多个事务并发执行时,如果并发控制措施不好,则可能会造成事务T1读了事务T2的“脏”数据。这里的“脏”

数据是指

D

B.T1回滚后的数据 D.T2回滚后的数据

B

A.T1回滚前的数据 C.T2回滚前的数据

12. 在判断死锁的事务等待图中,如果等待图中出现了环路,则说明系统

A.存在活锁 C.事务执行成功

二. 填空题

B.存在死锁 D.事务执行失败

1.为防止并发操作的事务产生相互干情况,数据库管理系统采用加锁机制来避免这种情况。锁的类型包括______和______。 共享锁(或S锁)

排他锁(或X锁)

2.一个事务可通过执行______语句来取消其已完成的数据修改操作。 ROLLBACK 3.事务应对要读取的数据加______锁,对要修改的数据加______锁。

共享(或S) 排他(或X)

4.要求事务在读数据项之前必须先对数据项加S锁,直到事务结束才释放该锁的封锁协议是______级封锁协议。 三 5.假设有两个事务T1和T2,它们要读入同一数据并进行修改,如果T2提交的结果覆盖了T1提交的结果,导致T1修改的结果无效。这种现象称为______。 丢失修改 6.在数据库环境下,进行并发控制的主要方式是_____。 加锁

7.如果总是将事务为两个阶段,一个是加锁期,一个是解锁期,在加锁期不允许解锁,在解锁期不允许加锁,则将

该规定称为_____。 两段锁协议

8.如果并发执行的所有事务都遵守两段锁协议,则这些事务的任何并发调度一定是_____。 可串行化的 9.一个事务只要执行了_____语句,其对数据库的操作就是永久的。 COMMIT

10.在单CPU系统中,如果存在多个事务,则这些事务只能交叉地使用CPU,将这种并发方式称为_____。 交叉并

发 三. 简答题

5.设有如下三个事务:

T1:B = A + 1; T2:B = B * 2; T3:A = B + 1

(1)设A的初值为2,B的初值为1,如果这三个事务并发的执行,则可能的正确的执行结果有哪些?

T1?T2?T3:A=7, B=6

34

T1?T3?T2:A=4, B=8 T2?T1?T3:A=4, B=3 T2?T3?T1:A=3, B=4 T3?T1?T2:A=2, B=6 T3?T2?T1:A=2, B=3

(2)给出一种遵守两段锁协议的并发调度策略。

6.设有如图8-16所示的两个事务的调度过程,根据此图完成下列各题。 ·35· (1)写出事务T1和T2包含的操作。 T1:A = B+20

T2:B =A +30

(2)事务T1、T2开始之前B的初值是多少? B = 100

(3)设A的初值为20,则这两个事务所有可能的正确执行结果有哪些? T1?T2:A = 120,B = 150 T2?T1:A = 70,B = 50

(4)该调度方式是否遵守两段锁协议? 是

35

图8-16 事务调度图

·36· 第9章 数据库编程 一. 选择题

1.创建存储过程的用处主要是

A.提高数据操作效率 C.实现复杂的业务规则

2.下列关于存储过程的说法,正确的是

A

A

B.维护数据的一致性 D.增强引用完整性

A.在定义存储过程的代码中可以包含数据的增、删、改、查语句 B.用户可以向存储过程传递参数,但不能输出存储过程产生的结果 C.存储过程的执行是在客户端完成的 D.存储过程是存储在客户端的可执行代码段

3.设要定义一个包含2个输入参数和2个输出参数的存储过程,各参数均为整型。下列定义该存储过程的语句,正确的是

A.CREATE PROC P1 @x1, @x2 int,

@x3 , @x4 int output

B.CREATE PROC P1 @x1 int, @x2 int,

@x2, @x4 int output

C.CREATE PROC P1 @x1 int, @x2 int,

@x3 int, @x4 int output

D.CREATE PROC P1 @x1 int, @x2 int,

@x3 int output, @x4 int output t

4.设有存储过程定义语句:CREATE PROC P1 @x int, @y int output, @z int output。下列调用该存储过程的语句中,正确的是

B.EXEC P1 10, @a int, @b int output C.EXEC P1 10, @a output, @b output D.EXEC P1 10, @a, @b output

5.下列修改存储过程P1的语句,正确的语句是

A.ALTER P1 C.MODIFY P1

6. 下列删除存储过程P1的语句,正确的语句是

A.DELETE P1 C.DROP P1

7.定义触发器的主要作用是 D

A.提高数据的查询效率 C.加强数据的保密性

8.现有学生表和修课表,其结构为:

学生表(学号,姓名,入学日期,毕业日期) 修课表(学号,课程号,考试日期,成绩)

现要求修课表中的考试日期必须在学生表中相应学生的入学日期和毕业日期之间。下列实现方法中,正确的是

B

36

B.增强数据的安全性 D.实现复杂的约束

B

B.ALTER PROC P1 D.MODIFY PROC P1

D

B.DELETE PROC P1 D.DROP PROC P1 C

A.EXEC P1 10, @a int output, @b int output

D

A.在修课表的考试日期列上定义一个CHECK约束 B.在修课表上建立一个插入和更新操作的触发器 C.在学生表上建立一个插入和更新操作的触发器 D.在修课表的考试日期列上定义一个外码引用约束

·37· 9.设有教师表(教师号,教师名,职称,基本工资),其中基本工资的取值范围与教师职称有关,比如,教授的基本工资是6000~10000,副教授的基本工资是4000~8000。下列实现该约束的方法中,可行的是 C

A. 可通过在教师表上定义插入和修改操作的触发器实现 B. 可通过在基本工资列上定义一个CHECK约束实现 C. A和B都可以 D. A和B都不可以

10.设在SC(Sno,Cno,Grade)表上定义了触发器:

CREATE TRIGGER tri1 ON SC INSTEAD OF INSERT … 当执行语句:INSERT INTO SC VALUES('s001', 'c01',90)

会引发该触发器执行。下列关于触发器执行时表中数据的说法,正确的是 D A.SC表和INERTED表中均包含新插入的数据 B.SC表和INERTED表中均不包含新插入的数据

C.SC表中包含新插入的数据,INERTED表中不包含新插入的数据 D.SC表中不包含新插入的数据,INERTED表中包含新插入的数据 11.设在SC(Sno,Cno,Grade)表上定义了触发器:

CREATE TRIGGER tri1 ON SC AFTER INSERT … 当执行语句:INSERT INTO SC VALUES('s001', 'c01',90)

会引发该触发器执行。下列关于触发器执行时表中数据的说法,正确的是 A A.SC表和INERTED表中均包含新插入的数据 B.SC表和INERTED表中均不包含新插入的数据

C.SC表中包含新插入的数据,INERTED表中不包含新插入的数据 D.SC表中不包含新插入的数据,INERTED表中包含新插入的数据

12.当执行由UPDATE语句引发的触发器时,下列关于该触发器临时工作表的说法,正确的是 C

A.系统会自动产生UPDATED表来存放更改前的数据 B.系统会自动产生UPDATED表来存放更改后的数据

C.系统会自动产生INSERTED表和DELETED表,用INSERTED表存放更改后的数据,用DELETED表存放更改前的数据

D.系统会自动产生INSERTED表和DELETED表,用INSERTED表存放更改前的数据,用DELETED表存放更改后的数据

13.下列关于游标的说法,错误的是 D

A.游标允许用户定位到结果集中的某行 B.游标允许用户读取结果集中当前行位置的数据 C.游标允许用户修改结果集中当前行位置的数据

D.游标中有个当前行指针,该指针只能在结果集中单向移动

14.对游标的操作一般包括声明、打开、处理、关闭、释放几个步骤,下列关于关闭游标的说法,错误的是

A.游标被关闭之后,还可以通过OPEN语句再次打开 B.游标一旦被关闭,其所占用的资源即被释放 C.游标被关闭之后,其所占用的资源没有被释放

37

B

·38· D.关闭游标之后的下一个操作可以是释放游标,也可以是再次打开该游标

二. 填空题

1.利用存储过程机制,可以_____数据操作效率。 提高

2.存储过程可以接受输入参数和输出参数,对于输出参数,必须用_____词来标明。 OUTPUT 3.执行存储过程的SQL语句是_____。 EXEC (EXECUTE)

4.调用存储过程时,其参数传递方式有_____和_____两种。按参数位置 按参数名 5.修改存储过程的SQL语句是_____。ALTER PROC

6.SQL Server支持两种类型的触发器,它们是_____触发型触发器和_____触发型触发器。 前 后 7.在一个表上针对每个操作,可以定义_____个前触发型触发器。 一

8.如果在某个表的INSERT操作上定义了触发器,则当执行INSERT语句时,系统产生的临时工作表是_____。 INSERTED

9.对于后触发型触发器,当触发器执行时,引发触发器的操作语句(已执行完/未执行)_____。 已执行完 10.对于后触发型触发器,当在触发器中发现引发触发器执行的操作违反了约束时,需要通过_____语句撤销已执行的操作。 ROLLBACK

11.打开游标的语句是_____。 OPEN cursor_name

12.在操作游标时,判断数据提取状态的全局变量_____。 @@fetch_status 四.上机练习

以下各题均利用第3、4章建立的Students数据库以及Student、Course和SC表实现。 1. 创建满足下述要求的存储过程,并查看存储过程的执行结果。 (1) 查询每个学生的修课总学分,要求列出学生学号及总学分。

create proc p1 as

select sno,SUM(credit) as 总学分

from SC join Course c on c.Cno=SC.Cno group by sno

(2) 查询学生的学号、姓名、修的课程号、课程名、课程学分,将学生所在系作为输入参数,默认值为“计算机

系”。执行此存储过程,并分别指定一些不同的输入参数值,查看执行结果。 create proc p2

@dept varchar(20) = '计算机系' as

select s.sno,sname,c.cno,cname,credit from Student s join SC on s.Sno=SC.Sno join Course c on c.Cno=SC.Cno

where Sdept = @dept 执行示例1:EXEC P2

执行示例2:EXEC P2 '通信工程系'

(3) 查询指定系的男生人数,其中系为输入参数,人数为输出参数。

create proc p3

@dept varchar(20),@rs int output as

select @rs = COUNT(*) from Student where Sdept = @dept and Ssex = '男'

38

(4) 删除指定学生的修课记录,其中学号为输入参数。

create proc p4 @sno char(7) as

delete from SC where Sno = @sno

(5) 修改指定课程的开课学期。输入参数为:课程号和修改后的开课学期。

create proc p5

@cno char(6),@x tinyint as

update Course set Semester = @x where Cno = @cno

2. 创建满足下述要求的触发器(前触发器、后触发器均可),并验证触发器执行情况。 (1) 限制学生的年龄在15~45之间。

create trigger tri1

on student after insert,update as

if exists(select * from inserted where sage not between 15 and 45) rollback

(2) 限制学生所在系的取值范围为{计算机系,信息管理系,数学系,通信工程系}

create trigger tri2

on student after insert,update as

if exists(select * from student where sdept not in ('计算机系','信息管理系','数学系','通信工程系'))

Rollback

(3) 限制每个学期开设的课程总学分在20~30范围内。

create trigger tri3

on course after insert,update as

if exists(select sum(credit) from course

where semester in (select semester from inserted ) having sum(credit) not between 20 and 30 ) Rollback

(4) 限制每个学生每学期选课门数不能超过6门(设只针对插入操作)。

create trigger tri4 on sc after insert as

if exists(select * from sc join course c on sc.cno = c.cno where sno in (select sno from inserted) group by sno,semester

39

·39· ·40· having count(*) > 6 ) rollback

3. 创建满足下述要求的游标,并查看游标的执行结果。

(1) 列出VB考试成绩最高的前2名和最后1名学生的学号、姓名、所在系和VB成绩。

declare @sno char(10),@sname char(10),@dept char(14),@grade char(4) declare c1 SCROLL cursor for select s.sno,sname,sdept,grade

from student s join sc on s.sno = sc.sno join course c on c.cno = sc.cno where cname = 'vb' order by grade desc open c1

print ' 学号 姓名 所在系 VB成绩'

print '---------------------------------------' fetch next from c1 into @sno ,@sname ,@dept ,@grade if @@FETCH_STATUS = 0

print @sno + @sname + @dept + @grade

fetch next from c1 into @sno ,@sname ,@dept ,@grade if @@FETCH_STATUS = 0

print @sno + @sname + @dept + @grade

fetch last from c1 into @sno ,@sname ,@dept ,@grade if @@FETCH_STATUS = 0

print @sno + @sname + @dept + @grade close c1 deallocate c1

(2) 列出每个系年龄最大的名学生的姓名和年龄,将结果按年龄降序排序。

declare @sname char(10),@age char(4),@dept char(20) declare c1 cursor for select distinct sdept from student open c1

fetch next from c1 into @dept while @@FETCH_STATUS = 0 begin

print @dept

declare c2 cursor for

select top 2 with ties sname,sage from student where sdept = @dept order by sage desc open c2

fetch next from c2 into @sname ,@age if @@FETCH_STATUS = 0 print @sname + @age fetch next from c2 into @sname ,@age if @@FETCH_STATUS = 0 print @sname + @age print '' close c2 deallocate c2

fetch next from c1 into @dept

40

本文来源:https://www.bwwdw.com/article/6a9g.html

Top