SQL Server 习题及答案.docx
《SQL Server 习题及答案.docx》由会员分享,可在线阅读,更多相关《SQL Server 习题及答案.docx(17页珍藏版)》请在冰豆网上搜索。
SQLServer习题及答案
各章习题及答案
第一章关系数据库原理
一、选择及填空题
(1)在下列四个选项中,不属于基本关系运算的是【1】
A)连接B)投影C)选择D)排序
(2)如果一个班只能有一个班长,而且一班长不能同时担任其它班的班长,班级和班长两个实体之间的关系属于【2】
A)一对一联系B)一对二联系C)多对多联系D)一对多联系
(3)扩展名为mdf的文件是【3】
A)主数据文件B)次数据文件C)日志文件D)项目文件
(4).SQLServer系统中的所有系统级信息存储于哪个数据库()。
A.masterB.model
C.tempdbD.msdb
1.SQLServer的物理存储主要包括3类文件:
、、。
2.若一个关系为R(学生号,姓名,性别,年龄),则_可以作为该关系的主码,姓名、性别和年龄为该关系的属性。
二、简答题
1、什么是数据库?
2、数据库系统有哪些特点?
3、试给出三个实际情况的联系,要求实体之间具有一对一、一对多、多对多各种不同的联系。
4、学校中对教师教学进行评价,被评对象为教师,评价对象有同行教师,学生,专家。
请用E—R图画出教学评价的概念模型。
第一章关系数据库原理(答案)
一、选择及填空题
(1)~(4)daaa
1、主数据文件,次数据文件,日志文件
2、学生号,非主或非码
二、简答题
1、数据库:
存储在一起的相关数据的集合(一个表内,表间直接关联,表间间接关联),无有害的或不必要的冗余(重复),可为多种应用服务,数据可以共享,对于拆、删、改、查等操作均可按照一种公共的可控制的方法进行。
数据被结构化。
2、答案:
1.数据结构化
2.数据的共享性高,冗余度低,易扩展
3.数据的独立性高
4.数据由DBMS统一管理和控制
3、答案:
一对一:
观众和座位
一对多:
班级和学生
多对多:
学生与课程
4、对于教学评价,对同一位被评教师而言,对其评价的学生、同行教师、专家都应该是多名,而且每一次成功评价后会得到一个评价数据,所以可得到对教师教学评价的E-R模型如下图所示。
(为了便于图形表示,图中省略了同行教师实体的属性,同教师实体的属性。
)
编号
第二章数据库和表的创建
1、采用代码方式创建数据库XSCJ。
要求:
存储路径为C:
\,数据库为XSCJ,主文件为prods_dat,初始容量为4MB,最大容量为10MB,增幅为1MB。
2、采用代码方式在数据库XSCJ中创建表XS_KC。
要求如下表:
列名
数据类型
长度
是否允许为空值
默认值
说明
课程号
char
3
否
无
主键
课程名
char
20
否
无
授课教师
char
8
是
无
开课学期
tinyint
1
否
1
只能为1~6
第二章数据库和表的创建(答案)
1、createdatabaseXSCJ
onprimary
(name=prods_dat,
filename=’c:
\prods.mdf’,
size=4,
maxsize=10,
filegrow=1)
2、createtableXS_KC
(课程号char(3)notnull,
课程名char(20)notnull,
授课教师char(8),
开课学期tinyintnotnulldefault1check(开课学期=1or开课学期=2or开课学期=3or开课学期=4or开课学期=5or开课学期=6)
constraintpk_kc
primarykey
(课程号)
)
第三章数据库的查询和视图
参照上面各表完成下列各题:
1、查询XSQK表中陈姓学生的所有情况。
2、用嵌套方法(IN)查询最高分的学生的学号、课程号和成绩。
3、用嵌套方法(IN)查询最高分的学生的学号、姓名、联系电话和成绩。
4、查询学生的平均分。
5、查询平均分低于60的学生学号
6、查询有不及格学生的课程的授课教师
第三章数据库的查询和视图(答案)
1、select*fromxsqkwhere姓名like‘陈%’
2、select学号,课程号,成绩fromxs_kcwhere成绩in(selectmax(成绩)fromxs_kc)
3、selecta.学号,姓名,联系电话,成绩
fromxsqkainnerjoinxs_kcb
whereb.成绩in(selectmax(成绩)fromxs_kc)
4、方法一:
selectdistinct学号,平均分=
(selectavg(成绩)fromxs_kcbwhereb.学号=a.学号)
fromxs_kca
方法二:
selectdistinct学号,avg(成绩)
fromxs_kc
groupby学号
5、方法一:
selectdistinct学号
fromxs_kca
where60>
(selectavg(成绩)fromxs_kcbwhereb.学号=a.学号)
方法二:
selectdistinct学号,avg(成绩)
fromxs_kc
groupby学号
havingsvg(成绩)<60
6、方法一:
selectdistinct授课教师
fromkc
where课程号=any
(select课程号fromxs_kcwhere成绩<60)
方法二:
selectdistinctkc.授课教师
fromkcinnerjoinxs_kconxs_kc.课程号=kc.课程号
wherexs_kc.成绩<60
第四章T-SQL语言
1、编写一个用户自定义函数average要求根据输入学号,求得该学生的各科的平均成绩。
2、使用日期函数求XSQK表中学生的年龄。
3、使用WHILECONTINUEBREAK语句求8!
。
4、使用case函数,根据学生的年龄范围显示相应信息(年龄在20岁以下的显示年龄较小,20到24岁的显示年龄适中,否则显示年龄偏大)。
第四章T-SQL语言(答案)
1、
createfunctionaverage(@stunoaschar(10))
returnsreal
begin
declare@averint
select@aver=
(selectavg(成绩)
fromxs_kc
where学号=@stuno
groupby学号)
return@aver
end
2、SELECTDATEDIFF(year,出生日期,getdate())as年龄FROMxsqk
3、
declare@objectint,@nint
select@object=1,@n=8
while@n>0
begin
set@object=@object*@n
set@n=@n-1
if@n>1
continue
else
begin
print‘8的阶乘为:
'
print@object
break
end
end
4、
select学号,年龄情况=
case
whenyear(getdate())-year(出生日期)<=20then'年龄较小'
whenyear(getdate())-year(出生日期)>20andyear(getdate())-year(出生日期)<24then'年龄适中'
else'年龄偏大'
end
fromxsqk
第五章、游标、存储过程和触发器
1、使用游标要遵循以下顺序。
2、使用游标,显示xs_kc表中的第4条和第7条记录。
3、使用游标,显示所有107号课程成绩及格的记录。
4、创建存储过程a,从数据库中的三个表中查询,学号、姓名、课程号、授课教师、成绩。
5、创建存储过程a,从数据库中的三个表中查询某人的学号、姓名、课程名、授课教师、成绩。
6、创建存储过程a,从数据库中的三个表中查询某些人的学号、姓名、课程名、授课教师、成绩。
7、创建存储过程a,计算指定学生的总成绩。
8、创建一个嵌套调用的存储过程,实现1!
+2!
+3!
+…+n!
。
9、如果向xs_kc表中添加或更改数据时,则将向客户端显示一条信息。
10、创建触发器,当向xs_kc表插入一记录时,检查该记录的学号在xsqk表中是否存在,检查课程号在kc表中是否存在,若有一项为否,则不允许插入。
11、创建一个删除类型的触发器notallowdelete,当在xsqk表中删除记录时,触发触发器,显示不允许删除表中数据的提示信息。
以说明INSTEADOF触发器的使用。
第五章、游标、存储过程和触发器(答案)
1、声明游标→打开游标→读取数据→关闭游标→删除游标
2、declarebscrollcursor
for
select*
fromxs_kc
openb
fetchabsolute5
fromb
fetchrelative2
fromb
closeb
deallocateb
3、declarecur_107成绩scrollcursor
for
select学号,课程号,成绩
fromxs_kc
where课程号='107'and成绩>=60
orderby学号
opencur_107成绩
fetchnext
fromcur_107成绩
while@@fetch_status=0
begin
fetchnext
fromcur_107成绩
end
closecur_107成绩
deallocatecur_107成绩
4、
usea
/*检查是否已存在同名的存储过程,若有,删除。
*/
ifexists(selectnamefromsysobjects
wherename='a'andtype='p')
dropprocedurea
go
/*创建存储过程*/
createprocedurea
as
selectxsqk.学号as学号,xsqk.姓名as姓名,xs_kc.课程号as课程号,kc.授课教师as授课教师,xs_kc.成绩as成绩
fromxsqk,xs_kc,kc
wherexsqk.学号=xs_kc.学号andxs_kc.课程号=kc.课程号
go
5、
usea
/*检查是否已存在同名的存储过程,若有,删除。
*/
ifexists(selectnamefromsysobjects
wherename='a'andtype='p')
dropprocedurea
go
/*创建存储过程*/
createprocedurea
@姓名char(8),@课程名char(20)
as
selectxsqk.学号as学号,xsqk.姓名as姓名,kc.课程名as课程名,kc.授课教师as授课教师,xs_kc.成绩as成绩
fromxsqk,xs_kc,kc
wherexsqk.姓名=@姓名andkc.课程名=@课程名andxsqk.学号=xs_kc.学号andxs_kc.课程号=kc.课程号
go
6、
usea
/*检查是否已存在同名的存储过程,若有,删除。
*/
ifexists(selectnamefromsysobjects
wherename='a'andtype='p')
dropprocedurea
go
/*创建存储过程*/
createprocedurea
@姓名char(8)
as
selectxsqk.学号as学号,xsqk.姓名as姓名,kc.课程名as课程名,kc.授课教师as授课教师,xs_kc.成绩as成绩
fromxsqk,xs_kc,kc
wherexsqk.姓名like@姓名andxsqk.学号=xs_kc.学号andxs_kc.课程号=kc.课程号
go
7、
usea
/*检查是否已存在同名的存储过程,若有,删除。
*/
ifexists(selectnamefromsysobjects
wherename='a'andtype='p')
dropprocedurea
go
/*创建存储过程*/
createprocedurea
@姓名char(8),@总成绩decimaloutput
as
Select@总成绩=sum(xs_kc.成绩)
fromxsqk,xs_kc
wherexsqk.姓名=@姓名andxsqk.学号=xs_kc.学号
groupbyxs_kc.学号
go
8、
(1)、创建阶乘存储过程:
createprocedurejiecheng
@nsmallint,
@jbigintoutput
as
select@j=1
while@n>0
begin
select@j=@j*@n,
@n=@n-1
end
(2)、创建加法存储过程
CREATEprocedurejiafa
@n1smallint,
@sbigintoutput
as
declare@m1bigint
set@s=0
while@n1>0
begin
executejiecheng
@n1,@m1output
select@s=@s+@m1,
@n1=@n1-1
end
9、
(1)、创建触发器:
createtriggerreminderonxs_kc
forinsert,update
asraiserror(‘数据添加或修改’,16,10)
(2)、执行:
insertintoxs_kc
(学号,课程号,成绩)
values
('1','1',1)
10、
(1)、创建触发器:
createtriggercheckstringonxs_kc
forinsert
as
ifexists(select*fromxs_kc
wherexs_kc.学号notin(selectxsqk.学号fromxsqk)or
xs_kc.课程号notin(selectkc.课程号fromkc))
begin
raiserror('违背数据的一致性',16,1)
rollbacktransaction
end
(2)、执行:
insertintoxs_kc
(学号,课程号,成绩)
values
('1','1',1)
(1)中另一种方法
createtriggercheckstring1onxs_kc
forinsert
as
ifexists(select*fromxs_kc,inserted
whereinserted.学号notin(selectxsqk.学号fromxsqk)or
inserted.课程号notin(selectkc.课程号fromkc))
begin
raiserror('违背数据的一致性',16,1)
rollbacktransaction
end
11、
创建触发器:
createtriggernotallowdelete
onxsqk
insteadofdelete
as
print'insteadof触发器开始执行……'
print'本表中的数据不允许删除'
执行:
usea
go
deletefromxsqkwhere学号='020101'
go
第六章、批、事务和锁
1、什么是事务?
必须具备哪几个ACID属性?
2、什么是锁?
琐有哪几种模式?
第六章、批、事务和锁(答案)
1、
(1)所谓事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位。
(2)事务具有4个特性,即原子性、一致性、隔离性和持续性。
2、
(1)锁就是防止其他事务访问指定资源的手段。
(2)锁定资源的方式有两种基本形式:
共享锁(ShareLocks,简称S锁)
排它锁(ExclusiveLocks,简称X锁)。
第七章、索引与数据完整性的实现
1、为XS_KC表创建一个简单索引IX_学号,该索引只包含一个索引列即学号列,且按升序排序。
2、创建一个检查约束,限制联系电话的格式“区号-电话号码”
3、定义一个规则对象对性别列进行检查,使性别只能取值1(表示男)或0(表示女),并将其绑定到XSQK表的性别列。
4、为XS_KC表和KC表建立基于课程号列的关联。
第七章、索引与数据完整性的实现(答案)
1、CREATEINDEXIX_学号
ONXS_KC
(学号)
2、ALTERTABLEXSQK
ADDCONSTRAINTCH_联系电话格式
CHECK(联系电话LIKE‘____-_______%’)
3、CREATERULERO_性别
AS@性别=1or@性别=0
绑定:
sp_bindruleRO_性别,’xsqk.性别’
4、
altertablexs_kc
addconstraintxs_kc_kc
foreignkey
(课程号)
referenceskc
(课程号)
第八章、SQLServer2000管理
1、SQLServer2000有几种身份验证方式?
它们的区别是什么?
2、数据备份策略有哪些?
第八章、SQLServer2000管理(答案)
1、
(1)、Windows身份验证模式:
用户只能使用Windows身份验证连接SQLServer2000;
(2)、混合模式:
用户既可以使用Windows身份验证连接SQLServer2000,又可以使用SQLServer身份验证连接到SQLServer2000。
2、
(1)只备份数据库
(2)备份数据库和事务日志
(3)差异备份
(4)文件和文件组备份