《SQL - Server - 2000》网络课程同步练习与模拟试题(3)

2020-04-15 12:45

答案:COMMIT、ROLLBACK

三、简答题

1.数据检索时,COMPUTE和COMPUTE BY产生的结果有何不同?

答案:使用COMPUTE子句和COMPUTE BY子句都是既能浏览明细数据又能看到统计的结果。只使用COMPUTE子句时,其查询的结果类似于总计,而使用COMPUTE BY子句时,其查询的结果将为带具体内容的分类进行统计。 2.对事务的管理包括哪几个方面? 答案:包括3个方面:

(1)事务控制语句。控制事务执行的语句。包括将一系列操作定义为一个工作单元。 (2)锁机制。封锁正被一个事务修改的数据,防止其他用户访问到不一致的数据。 (3)事务日志。使事务具有可恢复性。

3.简述事务保存点的概念。

答案:保存点提供了一种机制,用于回滚部分事务。可以使用SAVE TRANSACTION savepoint_name语句创建一个保存点,然后再执行ROLLBACK TRANSACTION savepoint_name语句回滚到该保存点,从而无须回滚到事务的开始。

在不可能发生错误的情况下,保存点很有用。在很少出现错误的情况下使用保存点回滚部分事务,比让每个事务在更新之前测试更新的有效性更为有效。更新和回滚操作代价很大,因此只有在遇到错误的可能性很小,而且预先检查更新的有效性的代价相对很高的情况下,使用保存点才会非常有效。

4.在应用程序中如何控制事务?

答案:应用程序主要通过指定事务启动和结束的时间来控制事务。主要使用Transact-SQL语句。系统还必须能够正确处理那些在事务完成之前便终止事务的错误。事务在连接层进行管理。当事务在一个连接上启动时,在该连接上执行的所有Transact-SQL语句在该事务结束之前都是该事务的一部分。

5.什么是锁定?

答案:在SQL Server 2000中,锁定就是给数据库对象加锁。使用锁定可以确保事务完整性和数据库一致性。锁定可以防止用户读取正在由其他用户更改的数据,并可以防止多个用户同时更改相同数据。如果不使用锁定,则数据库中的数据可能在逻辑上不正确,并且对数据的查询可能产生意想不到的结果。

四、程序设计题

1.设有如下基本表R:

R(NO,NAME,SEX,AGE,CLASS) 主关键字是NO

其中NO为学号,NAME为姓名,SEX为性别,AGE为年龄,CLASS为班号。写出实现下列功能的Transact-SQL语句。 (1) 插入一个记录(25,’李明’,’男’,21,’95031’) (2) 插入’95031’班学号为30、姓名为’郑和’的学生记录 (3) 将学号为10的学生姓名改为’王华’ (4) 将所有’95101’班号改为’95091’ (5) 删除学号为20的学生记录 (6) 删除姓’王’的学生记录

答案:

(1) INSERT INTO R VALUES(25,’李明’,’男’,21,’95031’)

(2) INSERT INTO R(NO,NAME,CLASS) VALUES (30,’郑和’,’95031’) (3) UPDATE R

SET NAME=’王华’ WHERE NO=10 (4) UPDATE R

SET CLASS=’95091’

WHERE CLASS=’95101’ (5) DELETE FROM R

WHERE NO=20 (6) DELETE FROM R

WHERE NAME LIKE ’王%’

2.在前面建立的factory数据库上,用Transact-SQL语句完成如下各题:

(1) 显示各职工的工资记录和相应的工资小计。

(2) 按性别和部门名的所有组合方式列出相应的平均工资。

(3) 对worker和depart表进行完整外部联接显示职工的职工号、姓名和部门名。 (4) 显示最高工资的职工的职工号、姓名、部门名、工资发放日期和工资。 (5) 显示最高工资的职工所在的部门名。

(6) 显示所有平均工资低于全部职工平均工资的职工的职工号和姓名。 (7) 采用游标方式实现(6)的功能。

(8) 先显示worker表中的职工人数,开始一个事务,插入一个职工记录,再显示worker表中的职工人数,回滚该事务,最后显示worker表中的职工人数。 答案:

(1)SELECT worker.职工号,worker.姓名,salary.工资 FROM worker,salary

WHERE worker.职工号=salary.职工号 ORDER BY worker.职工号,worker.姓名 COMPUTE SUM(salary.工资) BY worker.职工号

(2)SELECT worker.性别,depart.部门名,AVG(salary.工资) AS ‘平均工资’ FROM worker,depart,salary

WHERE worker.职工号=salary.职工号 AND worker.部门号=depart.部门号 GROUP BY worker.性别,depart.部门名 WITH CUBE COMPUTE SUM(salary.工资) BY worker.职工号 (3)SELECT worker.职工号,worker.姓名,depart.部门名

FROM worker FULL JOIN depart ON (worker.部门号=depart.部门号) ORDER BY worker.职工号

(4)SELECT worker.职工号,worker.姓名,depart.部门名,salary.日期,salary.工资 FROM worker,depart,salary

WHERE worker.职工号=salary.职工号 AND worker.部门号=depart.部门号 AND salary=

(SELECT MAX(工资) FROM salary) (5)SELECT 部门名 FROM depart WHERE 部门号= (SELECT 部门号 FROM worker WHERE 职工号= (SELECT 职工号 FROM salary WHERE 工资=

(SELECT MAX(工资) FROM salary)

) )

(6) SELECT 职工号,姓名 FROM worker WHERE 职工号 IN (SELECT 职工号 FROM salary GROUP BY 职工号

HAVING AVG(工资)<(SELECT AVG(工资) FROM salary) ) (7) USE factory GO

SET NOCOUNT ON

DECLARE @no int,@name char(10) DECLARE w_cursor CURSOR

FOR SELECT 职工号,姓名

FROM worker WHERE 职工号 IN (SELECT 职工号 FROM salary GROUP BY 职工号

HAVING AVG(工资)<(SELECT AVG(工资) FROM salary)) OPEN w_cursor

FETCH NEXT FROM w_cursor INTO @no,@name PRINT ’-----------------’ WHILE @@FETCH_STATUS=0 BEGIN

PRINT CAST(@no AS char(8))+@name FETCH NEXT FROM w_cursor INTO @no,@name END

CLOSE w_cuesor DEALLOCATE w_cursor (8) USE factory GO

DECLARE @num int

SELECT @num=COUNT(*) FROM worker

PRINT ‘原职工人数:’+CAST(@num AS CHAR(3)) GO

DECLARE @num int BEGIN TRANSACTION

INSERT INTO worker VALUES(20,'陈立','女','55/03/08',1,'75/10/10',4) PRINT ‘插入一个职工记录’

SELECT @num=COUNT(*) FROM worker

PRINT ‘职工任数:’+ CAST(@num AS CHAR(3)) ROLLBACK TRANSACTION GO

PRINT ‘回滚事务’ DECLARE @num int

SELECT @num=COUNT(*) FROM worker

PRINT ‘职工人数:’+CAST(@num AS CHAR(3))

第7章 索引

一、单项选择题 1. 建立索引的目的是

A. 减少存储空间 B. 提高存取速度 C. 减少输入输出 D. 减少冗余 答案:B

2. 下列不适合创建索引的情况是

A. 主键 B.外键 C. 主属性 D. 只有较少值的列 答案:D

3. 创建索引时默认的顺序是

A. ASC B. DESC C. ORDER D. GROUP 答案:A

4. 包含索引的所有长度固定列的最大大小为

A. 256字节 B. 300字节 C. 512字节 D. 900字节 答案:D

5. 包含同一索引的列的最大数目是

A. 8 B. 16 C. 24 D. 32 答案:B

二、填空题

1. 按照存储结构的不同,可以将索引分为 和 两类。 答案:聚集索引、非聚集索引

2. 如果要求索引中的字段值不能重复,应该建立 索引。 答案:惟一

3. 索引是针对一个 而建立的。 答案:表

4.组合索引是指 索引。

答案:将两个或者多个字段组合起来的

5.FILLFACTOR的物理含义是在指定SQL Server创建索引的过程中,各索引页的填满程度。对于那些频繁进行大量数据插入或者删除的表,在建立索引时应该为将来生成的索引数据预留较大的空间,应将FILLFACTOR设得 。 答案:较少

三、简答题

1.什么是索引?索引分为哪两种?各有什么特点?

答案:索引是为了加速对表中数据行的检索而创建的一种分散的存储结构。根据索引的顺序与数据表的物理顺序是否相同,可以把索引分为两种类型: ? ?

2.创建索引有什么优点和缺点? 答案:创建索引的优点如下: (1)加速数据检索。 (2)加快表与表之间的连接。

(3)在使用ORDER BY 和GROUP BY等子句进行数据检索时,可以减少分组和排序的时间。 (4)有利于SQL Server对查询进行优化。 (5)强制实施行的惟一性。 创建索引的缺点如下:

(1)创建索引要花费时间和占用存储空间。

(2)建立索引加快了数据检索速度,却减慢了数据修改速度。

3.哪些列上适合创建索引?哪些列上不适合创建索引? 答案:一般来说,以下的列适合创建索引:

(1)主键。通常检索、存取表是通过主键进行的,因此,应该考虑在主键上建立索引。

(2)连接中频繁使用的列。用于连接的列若按顺序存放,则系统可以很快地执行连接。如外键,除用于实现参照完整性外,还经常用于进行表的连接。

(3)在某一范围内频繁搜索的列和按排序顺序频繁检索的列。 以下的列不适合创建索引:

(1)很少或从来不在查询中引用的列。

(2)只有两个或很少几个值的列(如:性别),以这样的列创建索引并不能得到建立索引的好处。 (3)以bit、text、image数据类型定义的列。 (4)数据行数很少的小表一般也没有必要创建索引。

四、程序设计题

1.在前面建立的factory数据库上,用Transact-SQL语句完成下列各题:

(1)在worker表中的“部门号”列上创建一个非聚集索引,若该索引已存在,则删除后重建。 (2)在salary表的“职工号”和“日期”列创建聚集索引,并且强制惟一性。 答案:

(1)SET NOCOUNT OFF USE factory

聚集索引。数据表的物理顺序和索引表的顺序相同,它根据表中的一列或多列值的组合排列记录。

非聚集索引。数据表的物理顺序和索引表的顺序不相同,索引表仅仅包含指向数据表的指针,这些指针本身是有序的,用于在表中快速定位数据。


《SQL - Server - 2000》网络课程同步练习与模拟试题(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:基于单片机数字频率计设计(毕设开题报告)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: