SQL Server数据库试卷6
一、单项选择题(每题2分,共15题) 1、DBMS是什么?( )
(A)操作系统 (B)数据库管理系统 (C)数据库 (D) 数据库管理员 2 、SQL Server 2000是一个( )的数据库系统。
(A)网状型 (B)层次型 (C)关系型 (D)以上都不是 3、SQL Server 2000 采用的身份验证模式有( )。 (A)仅Windows身份验证模式 (B)仅SQL Server身份验证模式 (C)仅混合模式
(D)Windows身份验证模式和混合模式 4、关于主键描述正确的是:( )
(A)包含一列 (B)包含两列 (C)包含一列或者多列 (D) 以上都不正确 5、下列( )数据库不属于SQL Server 2000在安装时创建的系统数据库。 (A)master (B)NorthWind (C)model (D)bookdb 6、在SQL SERVER中局部变量前面的字符为:( ) (A)* (B)# (C)@@ (D) @
7、在SQL Server 2000中,当数据表被修改时,系统自动执行的数据库对象是( )。 (A)存储过程 (B)触发器 (C)视图 (D)其他数据库对象 8、SQL Server的字符型系统数据类型主要包括( )。
(A) Int、money、char (B) char、varchar、text (C) datetime、binary、int (D) char、varchar、int
9、在SELECT语句的WHERE子句的条件表达式中,可以匹配0个到多个字符的通配符是( )
(A) * (B)% (C)- (D)? 10、在WHILE循环语句中,如果循环体语句条数多于一条,必须使用: (A) BEGIN……END (B) CASE……END (C) IF…………THEN (D) GOTO
11、SELECT查询中,要把结果中的行按照某一列的值进行排序,所用到的子句是:
(A)ORDER BY (B)WHERE (C)GROUP BY (D)HAVING 12、要删除视图myview,可以使用( )语句。 (A) DROP myview
(B)DROP TABLE myview
(C) DROP INDEX myview (D)DROP VIEW myview 13、对视图的描述错误的是:( ) (A) 是一张虚拟的表
(B) 在存储视图时存储的是视图的定义 (C) 在存储视图时存储的是视图中的数据
(D) 可以像查询表一样来查询视图
14、SQL Server提供的单行注释语句是使用( )开始的一行内容。
(A) “/*” (B) “--” (C) “{” (D) “/” 15、假如有两个表的连接是这样的: table_a inner join table_b 其中table_a和table_b是两个具有公共属性的表,这种连接会生成哪种结果集? (A) 包括table_a中的所有行,不包括table_b的不匹配行 (B) 包括table_b中的所有行,不包括table_a的不匹配行 (C) 包括和两个表的所有行
(D) 只包括table_a和table_b满足条件的行 二、填空题(每空2分,共15空)
1、可以将数据库管理系统分为4种网络结构:MAIN FRAME大型数据库、本地小型数据库、
分布式数据库、__________。
2、在一个表中主键的个数为:__________。
3、在SQL Server 2000中,索引的顺序和数据表的物理顺序相同的索引是_____________。 4、角色是一组用户所构成的组,可以分为服务器角色和__________角色。 5、触发器有3种类型,即INSERT类型、 和 。 6、如果要计算表中的行数,可以使用聚合函数____________。 7、
SQL Server 2000
和 。
8、在SQL Server 2000中修改表的结构应使用关键字____________,修改表中的数据应使用关键字___________ 。
9、在使用一个游标的时候可以分为以下几步:___________、打开游标、从打开的游标中提取行、____________、释放游标。
10、一个事务的操作必须是具备以下四个属性:原子性、 、隔离性和_____________。
三、简答(20分)
1、为什么要创建索引(4分)
2、简述INSERT触发器的工作原理(6分)
3、根据表回答以下问题
两个表是先建关系,然后才输入数据,其中的关系为:book表中author_id作为外键关联到authors表的主键author_id上。 book表 列名 book_id book_name author_id authors表 列名 author_id author_name int varchar 数据类型 4 30 长度 允许空 int varchar int 数据类型 4 50 4 长度 允许空 提供备份数据库的两种方式是
(1)用Transact-SQL语句建立authors表(包括建立主键,列取值非空)(6分)
(2)根据参照完整性在两个表都要输入第一个记录时一般应先输入哪个表的数据?为什么?(4分)
四、编程题(共4题)(20分) student表(学生表) 学号 1 2 3
course表(课程表) 课程号 1 2 3 课程名 SQL Server VB 专业英语 学分 4 3 2 姓名 李明 张然 许晴 性别 男 女 女 年龄 20 19 18 系别 计算机系 经管系 电子系 sc表(选课表) 学号 1 2 2 3 课程号 1 1 2 3 成绩 90 85 76 70 1、 把course表中课程号为2的课程的学分修改为4。(4分)
2、 在student表中查询年龄大于18的学生的所有信息,并按学号降序排列。(5分) 3、 在以上三个表中查询选的课程的“学分”为4,并且成绩大于80的学生的学号、姓名和性别。(6分)
4、 创建一存储过程getDetailByName,通过输入参数学生姓名(如“张然\),筛选出该学
生的基本信息,对不存在此学生姓名的输入值,必须作一检测,打印信息“不存在此学生”。(5分)
SQL Server数据库试卷6参考答案
一、选择题(每题2分,共30分)
BCDCD DBBBA ADCBD
二、填空题(每空2分,共30分)
1、 客户机/服务器数据库 2、一 3、聚集索引 4、数据库 5、UPDATE类型、DELETE类型 6、COUNT() 7、备份数据库、备份事务日志 8、ALTER 、UPDATE 9、声明游标、关闭游标 10、一致性、永久性 三、简答(20分)
1、什么要创建索引?(4分)
答:创建索引可以大大提高系统的性能。第一,通过创建唯一性索引,可以保证每一行数据的唯一性。第二,可以大大加快数据的检索速度,这也是所以的最主要原因。第三,可以加速表与表之间的连接,特别是实现数据的参考完整性方面特有意义。第四,在使用ORDER BY和GROUP BY子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。第五,通过使用索引,可以在查询过程中,使用查询优化器,提高系统性能
2、简述INSERT触发器的工作原理(6分)
答:当向表中插入数据时,INSERT触发器触发执行。当INSERT触发器触发时,新的记录增加到触发器表中和inserted表中。该inserted表是逻辑表,保存了所插入记录的拷贝,允许用户参考INSERT语句中的数据。触发器可以检查inserted表,来确定该触发器的操作是否应该执行和如何执行。在inserted表中的那些记录,总是触发表中一行或多行记录的冗余。 3、
(1) (6分) create table authors
(author_id int primary key,
author_name varchar(30) not null)
(2) (4分)
如果先建立关系,然后再输入记录,在输入第一条记录时一般要先输入authors表,后输入book表。因为根据表之间的参照完整性,book表中author_id列的值要么取空值、要么取authors表中author_id列的某一个值,在此时book表的author_id列是不允许取空值的,所以应先输入authors表,后输入book表。
四、编程题(共4题,共20分) 1、 (4分)
update course set 学分=4
where课程号=2
3、(6分) 方法1:
1分
1分
(1分) (2分) (1分)
1分
2分
2、select * from student where 年龄>18 order by 学号 desc (5分)
select distinct student.学号,姓名,性别 from student, course, sc
(1分)
(1分)
where (student.学号=sc.学号) and (course.课程号=sc.课程号)
and (course.学分=4) and (sc.成绩>80) (1+1+1+1分)
(1分) 方法2:
select distinct student.学号,姓名,性别
from student Inner Join (sc Inner Join course On course.课程号=sc.课程号)
On student.学号=sc.学号
where (course.学分=4) and (sc.成绩>80)
4、(5分)
Create procedure getDetailByName
@Name nvarchar(10) AS
IF (SELECT COUNT(*) FROM student WHERE 姓名 = @Name) > 0
SELECT *
FROM student
Where 姓名 = @Name ( 3 ELSE
print '警示 : 不存在姓名为 ' + @Name + ' 的学生资料' ( 1
(2分+2分)
(1分+1分)
1分) 分 )
分 )
(