SQL_Server_2005题库1 下载本文

内容发布更新时间 : 2024/12/23 2:05:47星期一 下面是文章的全部内容请认真阅读。

三 简答题

38. 什么是视图,它与表的区别是什么:

在SQL中,外模式一级数据结构的基本单位是视图,视图是从若干基本表和(或)其他视图构造出来的表。我们创建一个视图时,只是把其视图的定义存放在数据字典中,而不存储视图对应的数据,因此,视图被称为“虚表”,这是它与表的主要区别。

39. 对于视图元组的更新操作(INSERT、DELETE、UPDATE)有哪三条规则: (1) 如果一个视图是从多个基本表使用联接操作导出的,那么不允许对这个视图执行更新操作。

(2) 如果在导出视图的过程中,使用了分组和聚合操作,也不允许对这个视图执行更新操作。

(3) 如果视图是从单个基本表使用选择、投影操作导出的,并且包含了基本表的主键或某个候选键,那么这样的视图称为“行列子集视图”,并且可以被执行更新操作。 SQL2中,允许更新的视图在定义时,必须加上“WITH CHECK OPTION”短语。

150.索引的意义 答:索引是SQL Server在列上建立的一种数据库对象。索引对表中的数据提供逻辑排序,可以提高查询数据的访问速度。

SQL Server提供两种索引形式,分别是:

(1)、簇集索引:根据键的值对行进行排序,每个标志能有一个簇集索引。 (2)、非簇集索引:不根据键值排序,索引数据结构与数据行是分开的。 索引的建立有利也有弊。建立索引可以提高查询速度,但建立过多的索引会占据过多的磁盘空间

151.请比较存储过程和触发器的差异

答:存储过程是独立于表而存在的数据对象,虽然它的使用与表紧密相关。触发器的使用则与表紧密结合。可以使用存储过程来完善应用程序。可以使用触发器来实现复杂的业务规则,更有效地实施数据完整性

五 操作题

1# 现有关系数据库如下: 数据库名:教师数据库

教师表(编号 char(6),姓名,性别,民族,职称,身份证号) 课程表(课号 char(6),名称)

任课表(ID,教师编号,课号,课时数) 用SQL语言实现下列功能的sql语句代码: 1. 创建上述三表的建库、建表代码(14分);

要求使用:主键(教师表.编号,课程表.课号)、外键(任课表.教师编号,任课表.课号)、默认(民族)、非空(民族,姓名)、唯一(身份证号)、检查(性别、课时数),自动编号(ID) 2. 将下列课程信息添加到课程表的代码(6分) 课号 课程名称

100001 SQL Server数据库 100002 数据结构 100003 VB程序设计

修改 课号为100003的课程名称:Visual Basic程序设计

删除 课号为100003的课程信息

3. 写出创建[任课表视图](教师编号,姓名,课号,课程名称,课时数)的代码;(4分) 4. 写出创建[某门课任课教师]内嵌表值函数以及检索的代码;(6分) 检索:所有代'SQL Server数据库'这门课程的老师姓名;

5. 写出创建[统计课时数]:输出最大课时数、最低课时数、平均课时的存储过程以及执行代码;(6分)

6. 写出创建:计算某教师代课总课时,并将值返回的存储过程以及执行代码。(6分) 执行:计算“郭老师”的总课时。(6分)

7. 检索有一门或一门以上课程课时数大于90的所有教师的信息,包括编号、姓名。(4分) 8. 建一个规则,并将其绑定到教师表的职称列上,规定取值为('教授','副教授','讲师', '助教')之一。(4分) 答案: 1.

create database [教师数据库] --(2分) use [教师数据库] go

create table 教师表 --(6分) ([编号] char(6) primary key, [姓名] nchar(4) not null,

[性别] nchar(1) check([性别] in ('男', '女')), [民族] nchar(8) default '汉族' not null, [职称] nchar(12),

[身份证号] char(18) unique )

create table 课程表 --(2分) ([课号] char(6) primary key, [名称] char(40) not null )

create table 任课表 --(4分) (ID IDENTITY(1, 1),

[教师编号] char(6) references 学生表(学号), [课号] char(6) references 课程表(课号),

[课时数] integer check([课时数] between 0 and 200)) 2.

insert 课程表 values('100001', 'SQL Server数据库') insert 课程表 values('100002', '数据结构') insert 课程表 values('100003', 'VB程序设计')

update 课程表 set 名称='Visual Basic程序设计' where 课号='100003' delete 课程表 where 课号='100003' 3.

create view [任课表视图] as

select 教师编号,姓名,课号, 课程名称,课时数 from 教师表,任课表 where 教师表.编号=任课表.教师编号 4.

create function [某门课任课教师](@课程名 varchar(15)) returns table as

return (select 课程名称, 课时数, 教师姓名=姓名 from 任课表视图 where 课程名=@课程名) go

select * from [某门课任课教师]('SQL Server数据库') 5.

create procedure [统计课时数] as

select 最大课时数=max(课时) ,最小课时数=min(课时),平均课时数=avg(课时) from 任课表 go

execute [统计课时] 6.

create procedure [统计课时] @教师名 nchar(16), as begin

declare @总课时 int

select @总课时=sum (课时) from 任课表视图 where 姓名 = @教师名 end go

execute [统计课时] '郭老师' 7.

select 编号, 姓名 from 教师表

where编号 in (select distinct 教师编号 from 任课表 where课时数>=90) 8.

create rule zhicheng _rule

as @zhicheng in ('教授','副教授','讲师', '助教') go

sp_bindrule zhicheng_rule, '教师表.职称' 2#

有一个[学生课程]数据库,数据库中包括三个表:

学生表Student由学号(Sno)、姓名(Sname)、性别(Ssex)、年龄(Sage)、所在系(Sdept)五个属性组成,记为: Student(Sno,Sname,Ssex,Sage,Sdept) ,Sno 为关键字。

课程表Course由课程号(Cno)、课程名(Cname)、先修课号(Cpno)、学分(Ccredit)四个属性组成,记为:Course(Cno,Cname,Cpno,Ccredit) Cno为关键字。 成绩表SG由学号(Sno)、课程号(Cno)、成绩(Grade)三个属性组成,记为: SG(Sno,Cno,Grade) (SNO, CNO)为关键字。 用SQL语言实现下列功能:

1.建立学生表Student,其中学号属性不能为空,并且其值是唯一的。 2.向Student表增加“入学时间(Scome)”列,其数据类型为日期型。

3.查询选修了3号课程的学生的学号及其成绩,查询结果按分数的降序排列。

4.查询学习1号课程的学生最高分数、平均成绩。 5.查询与“李洋”在同一个系学习的学生。 6.将计算机系全体学生的成绩置零。 7.删除学号为05019的学生记录。 8.删除计算机系所有学生的成绩记录。 答案: 1.

create table student (Sno char(5) primary key, Sname char(20), Ssex char(2), Sage int,

Sdept char(15) ) 2.

select distinct sno from sg

where grade < 60 3.

update student set sage=22

where sno='05001' 4.

select avg(grade) from sg

where cno='1' 5.

create procedure getdetailbyname @name nvarchar(10) as

if (select count(*) from student where sname = @name) > 0 select * from student where sname = @name else

print '不存在姓名为 ' + @name + ' 的学生资料' 6.

select sname,ssex,sage from sdudent

where sdept=’计算机系’and sname like '赵 %' and ssex ='女' 7.

create view [学生成绩表视图] as

select sno, sname, cno, cname, grade from sg, sdudent where sC、sno=sdudent.sno 8.

insert into student

values ('05020', '丁莉', '女', 17, '计算机系') 3#

假定使用的“图书”、“读者”、“借阅”和ZGJ K库的定义如下:

图书(总编号C(6),分类号C(8),书名C<16),作者C(6),出版单位C<16),单价N(7,2)) 读者(借书证号C(4),单位C,姓名C(6),性别C<2),职称C<6),地址C(16)) 借阅(借书证号C(4),总编号C(6),借书日期D())

ZGJK(职工号C(6),姓名C(6),性别C(2),出生日期D<),职称C(6),基本工资N(7,2)) 1. 查 询 出“图书”数据库中高等教育出版社出版的单价不低于20元的所有各类的图书。 2. 按 单 价升序显示“图书”库中清华大学版的所有图书。 3. 分 组 统计出“借阅”库中每一种借书证号所借图书的册数。 4. 联 接 查询“借阅”、“读者”和“图书”三个库,得到每一本所借图书的读者的借书证号、姓

名、单位和书名。

5. 显 示 出ZGJK 库中基本工资在300至500元之间的所有职工记录。

6. 在 ZG JK 库上按职工号建立一个单索引文件zgh.id x,并自动成为主索引。 7. 使 ZG JK 库上的结构化复合索引文件中的标记为“职称”的索引成为主控索引。

1. selectd istinct书名,作者,单价; from 图书;

where出版单位=“高等教育”AND单价>=20.0 0 2. select} ; from 图 书;

where出版单位=“清华大学”; orderb y单价

3. select借书证号,count(} ); from 借 阅;

group by借书证号

4. select x.借书证号,Y.姓名,Y.单位,z.书名; from 借 阅x,读者Y,图书z;

where x. 借书证号=Y.借书证号and x.总编号=z.总编号 5. usez gjk

List for 基本工资>=300.anD、基本工资<= 500 6. usez gjk

index o n职工号toz gh 7. usez gjk

set order t ot ag职称 4#

在名称为商品库的数据库中包含有商品表1和商品表2,它们的定义分别为: 商 品表 1(商品代号char(8),分类名char(8),单价float,数量int) 商 品表 2(商品代号char(8),产地char(6),品牌char(6))

在名称为教学库的数据库中包含有学生、课程和选课三个表,它们的定义分别为: 学生 ( 学 生号char(7),姓名char(6),性别。har(2),出生日期datetime, 专 业 ch ar (1 0 ), 年级int)

课程 ( 课 程号char<4),课程名char(10),课程学分int)