SQL Server数据库 复习提要(B信管091)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
试卷题型
一.名词解释(每题2分,共10分)
数据管理、E-R模型、数据库、数据库管理系统、数据库系统、模式(概念模式、逻辑模式)、外模式(用户模式)、内模式(物理模式、存储模式)、数据独立性、主数据文件、日志文件、视图、索引、簇索引、存储过程、触发器、游标、内连接、左(外)联接、主键约束、唯一约束、检查约束、事务、数据依赖、第1范式、第2范式、第3范式、死锁、ado接口
二.填空题(每空1分,共20分)
关于数据库的基本知识
三.是非题(每题1分,共10分)
四.单项选择(每题2分,共20分)
五.按要求写出相应的SQL语句(每题2分,共20分)
设有如下关系表:
student(sid char(8),sname char(10),ssex char(2),height real,sage datetime,stl int)
course(cid char(4),cname char(10),credit int)
result(sid char(8),cid char(4),score int )
注:sid为学号(如09040105,09表示入学时间,04表示学院代号,01表示班级代号,05表示学号),sname为姓名,ssex为性别(‘男’,‘女’), height 为身高,sage为出生年月,stl表示高考总分;
cid为课程号,cname为课程名称,credit为学分;
score为课程成绩。
写出实现下列功能的SQL 语句。
(1)创建一个新的表totalgrade,具有数据列:sid,sname,sscore
Create table totalgrade(sid char(8),sname char(10),sscore int)
(2)在student中插入一条记录(’09010619’,’王鸿路’,’03/21/93’);Insert into student (sid,sname,sage)
values(‘09010619’,’王鸿路’,’03/21/93’)
(3)通过student表,更新totalgrade表的列数据;
Insert into totalgrade
Select sid,sname,stl from student
(4)将result表中学号为“09030805”的学生,课程号为“0102”的分数改为94;
Update result
set score = 94
Where sid=‘09030805’ and cid=‘1020’
(5)通过result表更新totalgrade表的总成绩sscore
Update totalgrade
set sscore=
(select sum(score) from result where totalgrade.sid=result.sid )
(6)删除totalgrade表中总成绩sscore低于400分的学生记录
Delete from totalgrade
where sscore< 400
(7)在student表中查询学号为09040302的同学的姓名和年龄
Select sname, datepart(yy,getdate())-datepart(yy,sage)
from student
where sid=’09040302’
(8)在student表中查询与“刘伟平”年龄相同的所有学生的学号、姓名Select sid,sname
from student
where sage=
(s elect sage from student where sname=‘刘伟平’)
(9)列出班级为03的学生中高考总分比班级为02的学生都高的学生的sid,sname,stl
Select sid, sname,stl
from student
where substr(sid,5,2)=‘03’
and stl>all (select stl from student where substr(sid,5,2)=‘02’)
(10)查询选修“计算机基础”课程分数在80—90之间的学生的学号、姓名、课程名称、分数
Select student.sid , student.sname,ame,result.score
From student,course,result
Where student.sid=result.sid and course.cid=result.cid and
ame=’计算机基础’ and result.score between 80 and 90
六、程序填空(每空2分,共20分)
(主要是关于完整性约束、游标、存储过程、触发器)
1.利用T-SQL语言修改student 的表,为学号sid列定义主键,为高考总分stl 列定义约束“0-500”分。
alter table student(
add Constraint pk_s primary key ( ‘sid ’)
add Constraint ck_stl check ( stl between 0 and 500 ))
2. 以下程序用游标gd_cur查寻并显示studentsdb数据库的grade表的每条记录,且判断出每条记录的分数等级是优秀、良好、及格还是不及格,将等级显示在每条记录的末尾。
Declare @sid char(8) ,@cid varchar(10) , @scr numeric(5,2)
Declare gd_cur cursor
For select 学号,课程号,分数from grade
Open gd_cur
Fetch from gd_cur into @sid ,@cid , @scr
While @@fetch_status=0
Begin
Print @sid+replicate(‘’,3)
+@cid+str(@scr)+ replicate(‘’,3)
+( case
When @scr>=90 then ‘优秀’
When @scr>=70 then ‘良好’
When @scr>=60 then ‘及格’
Else ‘不及格’
End)
Fetch grd_cur into @sid ,@cid , @scr
End
Close gd_cur
Deallocate gd_cur
3. 创建和执行带输入和输出参数的存储过程get_credit,查询studentsdb数据库的credit、curriculumn表中学生的成绩和学分,如果大于60分,则返回对应课程的学分,否则返回学分值为0。
Create procedure get_credit
@sid char(4),
@cname char(10),
@score real output,
@credit real output
as
select @score= 分数,@credit =
case
when 分数<60 then 0
else 学分
end
from credit as cr join curriculumn as cu on cr.课程编号=cu.课程编号
where cr.学号=@sid and cu.课程编号=@cname
执行存储过程get_credit,查询学号为“0001”的学生的“SQL Server数据库”课程的成绩和学分。
Declare @score real,@credit int
Exec get_credit ‘0001’,’ SQL Server数据库’ , @score output,@credit output Print ‘成绩=’+convert(varchar(6),@score)
Print ‘所获得学分=’+convert(char(2),@credit)
4.创建update触发器up_grade ,当studentsdb数据库的grade表中课程编号列数据被修改时,显示提示信息“用户不能修改课程编号列”。
Create trigger up_grade
On grade
For update
As
If update( 课程编号)
Begin
Print ‘用户不能修改课程编号列!’
rollback
End。