1-14章《数据库原理及应用-(SQLServer2008版)》 唐国良蔡中民习题参考答案

发布时间 : 星期一 文章1-14章《数据库原理及应用-(SQLServer2008版)》 唐国良蔡中民习题参考答案更新完毕开始阅读

而视图只是由SELECT语句组成的查询定义的虚拟表,因此数据库在存储视图时只存储视图的定义,虽然与普通的表一样视图由字段和记录组成,但本身不存储数据。

联系:视图中的数据是根据SELECT语句在基表中查询而获得的,一旦数据表中的数据更改则视图中的数据也会跟着更改。而如果更改视图中的数据则是通过视图修改了视图所对应的基表中的数据,因此基表是视图的基础二者密不可分。

2.答:视图(View)是一种虚拟数据库对象,是从用户使用数据库观点出发,为用户提供了一种从一个特定的角度来查看数据库中数据的方法。

优点:简化了用户对数据的查询和处理。使用户集中视点增加数据的可读性。可以保证数据的逻辑独立性。增加了数据的安全性。 3.答:(1)在视图中修改的列必须直接引用表列中的基础数据。它们不能通过其他方式派生,例如通过聚合函数(AVG、COUNT、SUM、MIN、MAX等)或者通过表达式并使用列计算出其他列的情况。使用集合运算符(UNION、UNION ALL、CROSSJOIN、EXCEPT和INTERSECT)形成的列得出的计算结果不可更新。

(2)被修改的列不受 GROUP BY、HAVING 或DISTINCT 子句的影响。 (3)创建视图的SELECT语句的FROM子句中至少要包含一个基表。 4.将创建视图的基表从数据库中删除掉,视图也会一并删除吗? 答:不会。 5.答:

USE stu_info GO

CREATE VIEW avg_stud AS

SELECT student.sname,AVG(grade.grade) AS 平均分 FROM student,grade WHERE student.s_id=grade.s_id

GROUP BY student.s_id,student.sname

第7章

1.答:为了提高查找速度而提出的一种记录着表中一列或多列按照一定顺序建立的排序,以及与这些排序列值与记录之间的对应关系的结构。

2.答:索引的类型按照组织方式来分主要是聚集索引和非聚集索引两种;按照数据的唯一性来分,可以分为唯一索引和非唯一索引两种;按照索引键的列数来分,可以分为单一索引和组合索引两种。

3.答:优点:(1)快速存取数据;(2)保证数据记录的唯一性;(3)实现表与表之间的参照完整性;(4)在使用ORDER BY、GROUP BY子句进行数据检索时,利用索引可以减少排序和分组的时间。缺点:(1)创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。(2)索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。(3)当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。 4.答:一个聚集索引和若干个非聚集索引。

5.答:随着数据库的使用,数据不断发生变化,经过多次的增加、修改和删除等更新操作以后,索引的数据可能会分散在硬盘的各个位置,也可能将本应该存储在同一个页中的索引分散到多个页中,这样就产生了很多索引碎片。这些碎片与操作系统里的硬盘碎片一样,会影

响系统性能。当碎片增多时,SQL Server的查询速度会明显降低。所以需要重建索引来整理索引碎片。方法:重新组织索引或重新生成索引两种方法。

第8章

习题解答

思考与练习答案: 1(略)2(略) 3、(1)

USE Northwind

DECLARE @price money

DECLARE @returnstr varchar(50)

SELECT @price = 单价 FROM 产品 WHERE 产品名称= N'蕃茄酱' SET @returnstr = CASE WHEN @price<$20 THEN '蕃茄酱的单价低于20元' WHEN $20<=@price and @price<40 THEN '蕃茄酱的单价在20元与40元之间' WHEN $40<=@price and @price<=80 THEN '蕃茄酱的单价在40元与80元之间' ELSE '蕃茄酱的单价大于80元' END

PRINT @returnstr (2)

USE Northwind

DECLARE @price money

DECLARE @returnstr varchar(50) SELECT @price = 单价 FROM 产品 WHERE 产品名称= N'蕃茄酱' IF @price<$20 GOTO print20 --跳转到标签print20 IF $20<=@price and @price<40 GOTO print40 --跳转到标签print40 IF $40<=@price and @price<=80

GOTO print80 --跳转到标签print80 GOTO other --跳转到标签other print20: PRINT '蕃茄酱的单价低于20元' GOTO theEnd --跳转到标签theEnd print40: PRINT '蕃茄酱的单价在20元与40元之间' GOTO theEnd --跳转到标签theEnd print80: PRINT '蕃茄酱的单价在40元与80元之间'

GOTO theEnd --跳转到标签theEnd other: PRINT '蕃茄酱的单价大于80元' theEnd:

4、

USE Northwind

DECLARE @execstr varchar(1000) DECLARE @year int SET @year = 2010 WHILE @year>2001 BEGIN set @execstr = 'SELECT * FROM 订单 WHERE YEAR(订购日期)=' +CAST(@year AS varchar(4)) --将查询语句放在一个变量中 EXEC (@execstr) --执行变量中的查询语句

--当该年的订单数不为零时将查询出来的记录插入到一个新表中 IF @@ROWCOUNT >0 --执行括号里的T-SQL语句 EXECUTE ('SELECT * INTO 订单_'+@year +' FROM 订单 WHERE YEAR(订购日期)='+@year) SET @year = @year - 1 END

第9章

1.答:存储过程是一种数据库对象,是为了实现某个特定任务的一组T-SQL语句和可选控制流语句的预编译集合,这些语句在一个名称下存储并作为一个单元进行处理。存储过程在第一次执行时进行编译,然后将编译好的代码保存在高速缓存中供以后调用,以提高代码的执行效率。

2. 答:执行触发器的时候,系统会产生两个临时表。插入表inserted表里存放的是更新前的记录:对于插入记录操作来说,inserted表里存放的是要插入的数据;对于更新记录操作来说,inserted表里存放的是要更新的记录。deleted表里存放的是更新后的记录:对于更新记录操作来说,deleted表里存放的是更新前的记录(更新完后即被删除);对于删除记录操作来说,deleted表里存入的是被删除的旧记录。

3.答:触发器可以分为两大类:DML触发器和DDL触发器。 DML(数据操纵语言)触发器是在数据库服务器中发生数据操作语言事件时执行的存储过程。DML触发器是在执行一个Insert、Update或Delete语句时触发。DML触发器又分为两类,After触发器和Instead Of触发器。

DDL(数据定义语言)触发器是在响应数据定义语言事件时执行的存储过程。DDL触发器一

般用于执行数据库中的管理任务,例如审核和规范数据库操作、防止数据库表结构被修改等。 4. (1)

USE stu_info GO

CREATE PROCEDURE Sel_grade @snochar(10),@cno char(3)AS SELECT grade FROM grade

WHERE s_id=@sno AND c_id=@cno (2)

USE stu_info GO

CREATE PROCEDURE Sel_Course @sdepnvarchar(10)AS SELECT sdepartment,c_id,COUNT(*)AS 人数 FROM student,grade

WHERE sdepartment=@sdep AND student.s_id=grade.s_id GROUP BY sdepartment,c_id ORDER BY sdepartment (3)

USE stu_info GO

CREATE PROCEDURE Sel_Stu @kcnamenvarchar(10)AS

SELECT cname,course.c_id,COUNT(*)AS 人数,AVG(grade) AS 平均分 FROM course,grade

WHERE cname=@kcname AND course.c_id=grade.c_id GROUP BY cname,course.c_id (4)

USE stu_info GO

CREATE TRIGGER sc_ins_60 ON grade AFTER INSERT AS BEGIN

IF (SELECT COUNT(*)FROM grade

WHERE c_id=(SELECT c_id FROM inserted))>60 BEGIN PRINT '该课程选课人数已满!请另选其他课程。' ROLLBACK END END (5)

联系合同范文客服:xxxxx#qq.com(#替换为@)