SQL上机操作实验.docx
- 文档编号:5651596
- 上传时间:2022-12-30
- 格式:DOCX
- 页数:48
- 大小:1.82MB
SQL上机操作实验.docx
《SQL上机操作实验.docx》由会员分享,可在线阅读,更多相关《SQL上机操作实验.docx(48页珍藏版)》请在冰豆网上搜索。
SQL上机操作实验
《SQLserver2000》上機操作实验
一、本实验课在培养实验能力中的地位及作用
数据库技术是一个理论和实际紧密联系的技术,而SQLserver2000则是数据库具体应用的一个数据库开发系统。
在学习过程中,除了解SQLserver系统的设计环境及各种工具的使用方法、数据库系统结构、数据库应用方法等知识外,通过实验对相关技术加深认识,切实加强学生的实践能力,是教学中一个重要且必要的环节。
并为其它信息系统专业课程奠定基础。
《SQLserver2000》是一门实践性很强的课程,只有通过上机实践才能真正领会主教材中介绍的知识。
二、应达到的实验能力标准
本实验的教学目标是使学生掌握如何使用SQLserver2000数据库开发系统,了解数据库设计及相关操作的基本概念与方法,进而学会建立与组织、操作数据库。
上机实验的主要目标如下:
(1)通过上机操作,加深对数据库系统理论知识的理解。
(2)通过使用具体的DBMS,了解一种实际的数据库管理系统并掌握其操作技术。
(3)通过上机实验,提高动手能力,提高分析问题和解决问题的能力。
三、实验主要内容
试验一SQLserver2000的安装及SQLserver2000常用工具的使用
(学时4)
要求:
掌握SQLserver2000的安装方法
掌握SQLserver2000常用工具的使用方法
试验二数据库及表的创建和管理
(学时4)
要求:
掌握SQLserver2000数据库的创建及使用方法
掌握SQLserver2000数据库的创建使用方法
试验三约束的创建及使用
(学时2)
要求:
能用T—SQL语言及企业管理器创建约束
试验四表中数据的查询及维护
(学时4)
要求:
掌握表中数据的查询方法及操作方法
试验五Transact—SQL程序设计
(学时2)
要求:
掌握Transact—SQL程序设计的方法
要求:
掌握用户自定义函数的创建方法
试验六SQLServer视图及索引的创建及使用
(学时4)
要求:
掌握视图的创建及调用
掌握索引的创建及调用
试验七SQLServer的存储过程
(学时4)
要求:
掌握存储过程的创建及调用
试验八SQLServer的触发器
(学时4)
要求:
学会触发器的创建及使用
试验九SQLServer的安全性管理及代理服务
(学时4)
要求:
通过实验理解SQLServer的安全性管理及代理服务
试验十数据库的备份及恢复
(学时2)
要求:
学会如何备份及恢复数据库
实验十一SQLServer数据转换
(学时4)
要求:
掌握数据的导入\导出及DTS设计器的使用
四、实验成绩考核方法
实验成绩在课程总成绩中占20%,每次实验以百分记分,独立完成实验内容达到实验目的为100分,完成实验内容但对实验内容理解不清为60分,其他情况酌情定分。
最后计算平均分并乘以0.2加入总分中。
五、实验教材、参考资料
1.《SQLServer学习与上机实验指导》李春葆等清华大学出版社
2.《SQLSERVER数据库设计与应用案例训练教程》魏茂林等电子工业出版社
3.《SQLServer数据库应用系统开发技术实验指导及习题解答》朱如龙等编著机械工业出版社
六、实验项目汇总表
序号
内容
实验学时
实验一
SQLserver2000的安装及SQLserver2000常用工具的使用
4
实验二
数据库及表的创建和管理
4
实验三
约束的创建及使用
2
实验四
表中数据的查询及维护
4
实验五
Transact—SQL程序设计
2
实验六
SQLServer视图及索引的创建及使用
4
实验七
SQLServer的存储过程
4
实验八
SQLServer的触发器
4
实验九
SQLServer的安全性管理及代理服务
4
实验十
数据库的备份及恢复
2
实验十一
SQLServer数据转换
4
实验附录:
上机实验一
1.练习安装SQLSERVER2000及卸载SQLSERVER2000。
2.管理器创建一个新的SQLServer服务器组,作为MicrosoftSQLServers的子对象,名称为“NewGroup”
3.在计算机上再安装一个SQLServer命名实例,实例名为“people”。
使用企业管理器在NewGroup服务器组下创建一个新的SQLServer注册,使她连接people实例。
上机实验二
1.使用企业管理器创建名为student的数据库,并设置数据库主文件名为syudent_data,大小为10MB;日志文件为student_log,大小为2MB.其他参数取默认值。
步骤:
a.
b.
c.
d.
2.使用Transact—SQL语言创建一个student1数据库,主文件逻辑名为student1_data,物理文件名为student1.mdf,为10MB,增长速度为10%;数据库的日志文件逻辑名为syudent1_log,物理文件名为student1.ldf,初始化大小为1MB,最大尺寸为5MB,增长速度为1MB;文件存放路径为c:
\data文件夹下。
Createdatabasestudent1
Onprimry
(name=student1_data,
filename=c:
\data\student1.mdf,
size=10,
maxsize=unlimited,
filegrowth=10%)
logon
(name=student1_log,
filename=c:
\data\student1.ldf,
size=1,
maxsize=5,
filegrowth=1)
3.在student数据库中创建一个名为pupil的表,要求:
(snochar(6)notnull,snamechar(10)notnull,ssexchar
(2)notnull,birthdaydatetimenotnull,politychar(20))
步骤:
a.
b.
c.
保存并命名为pupil即可。
上机实验三
1.将pupil表的sno设置为主键。
2.为sname字段设置惟一性约束。
步骤:
3.为ssex和birthday设置检查性约束,要求ssex只能为‘男’或‘女’,birthday应该大于‘1987-1-1’。
步骤:
4.
为polity字段设置默认约束,值为‘群众’。
5.再创建一个学生选课表sc(snochar(6)notnull,cnochar(10)notnull,gradereal).
为sc表创建外键约束,把sc表的sno和pupil表的sno关联起来,在这两个表之间创建一种制约关系。
步骤:
最后保存该关系图即可。
上机实验四
1.已知一个名为pupil的表:
(snochar(6)notnull,snamechar(10)notnull,ssexchar
(2)notnull,birthdaydatetimenotnull,politychar(20),sdeptchar(20)notnull)
a.利用insert语句向其中插入一条新的记录:
(‘0007’,‘张三’,‘男’,‘1982-3-21’,‘团员’,’计算机系’)
insertintopupil
values(‘0007’,‘张三’,‘男’,‘1982-3-21’,‘团员’,‘计算机系’)
b.利用update语句将编号为‘0004’的学生polity改为‘党员’:
updatepupil
setpolity=’党员’
wheresno=’0004’
a.利用delete语句将‘186-1-1’以后出生的女同学记录删除。
Deletefrompupil
Wherepolity>1986-1-1andssex=’女’
2.针对pupil、sc、course三张表完成以下查询:
a.查询所有学生的基本信息,并按出生日期升序排列
select*frompupilorderbypolity
b.查询女同学的信息和女同学的人数
select*frompupilwheressex=’女’
computecount(sno)
c.查询所有男同学的年龄
selectyear(getdate())-year(birthday)as年龄frompupil
d.所有选课学生的姓名、选修课程名及成绩
selectsname,cname,grade
frompupil,sc,course
wherepupil.sno=sc.snoando=o
e.不及格学生的姓名
selectdistinctsname
frompupil,sc,course
wherepupil.sno=sc.snoando=oandgrade<60
f.查询‘刘’姓学生的信息
select*frompupilwheresnamelike‘刘%’
g.查询polity为’团员’或’党员’的学生信息
select*frompupilwherepolityin(‘团员’,’党员’)
h.查询各门课程的选课人数
selectcno,count(sno)fromscgroupbycno
i.查询缺少成绩的学生的学号及课程号
selectsno,cnofromscwheregradeisnull
j.查询与‘刘成’同一个系的学生情况
select*frompupilwheresdeptin(selectsdeptfrompupilwheresname=’刘成’))
k.查询选修了课程名为‘MIS’的学生的学号和姓名
selectsno,snamefrompupilwheresnoin(selectsnofromscwherecnoin(selectcnofromcoursewnerecname=’MIS’))
上机实验五
1.编写一个用户自定义函数fun_avggrade,要求根据输入的班级号和课程号,求此班级此课程的平均分。
Createfunctionfun_avggrade
(@classnumberaschar(10),@coursenumberaschar(10))
returnsreal
begin
declare@avgresult
select@avgresult=avg(grade)
fromsc
wheresubstring(sno,1,len(sno)-2)=@classnumberandcno=@coursenumber
return@avgresult
end
2.编写一个用户自定义函数,完成以下功能:
根据两个
输入参数(成绩上限和成绩下限),求sc数据表中满足输
入条件的学生人数。
Createfunctionfun_sumren
(@maxlinereal,@minlinereal)
returnsint
begin
declare@personcountasint
select@personcount=(selectcount(distinctsno)fromsc)
fromsc
wheregrade<=@maxlinerealandgrade>=@minline
return@personcount
end
上机实验六
1.如何通过企业管理器和Transact_SQL语句对视图进行创建、修改和删除?
通过企业管理器:
创建步骤:
最后保存该视图即可。
修改步骤:
进入该界面重新修改该视图即可。
删除步骤:
通过Transact_SQL语句:
创建:
createview视图名
[withencryption]
asselect_statement
[withcheckoption]
修改:
利用alterview视图名
删除:
利用dropview视图名
2.
通过Transact_SQL语句创建一个视图,计算各个班级的各门课程的平均分。
Createviewv_avggrade
As
Selectsubstring(pupil.sno,1,len(pupil.sno)-2)as班级,
Cnameas课程名称,
Avg(grade)as平均分
Frompupil,sc,grade
Wherepupil.sno=sc.snoando=o
Groupbysubstring(pupil.sno,1,len(pupil.sno)-2),Cname
3.通过Transact_SQL语句创建一个视图,显示‘高等数学’未过的学生的信息。
Createviewv_gradenotpass
As
Selectpupil.sno,sname,cname,grade
Frompupil,sc,course
Wherepupil.sno=sc.snoando=oandgrade<60
Andcname=’高等数学’
4.
通过Transact_SQL语句创建一个视图,查询的数据为99521班学生的考试成绩。
Createviewv_grade99521
As
Selectpupil.sno,sname,cname,grade
Frompupil,sc,course
Wherepupil.sno=sc.snoando=oand
left(pupil.sno,5)=’99521’
5.如何通过企业管理器创建索引?
步骤:
点击‘新建’按钮
点击‘确定’
点击‘关闭’
6.
如何删除索引?
选中该索引点击‘删除’即可
或
利用dropindex表名.索引名完成删除
上机实验七
1.创建一个存储过程stugradeinfo,查询班级、学号、姓名、性别、课程名称、分数
createprocedurestugradeinfo
as
select班级=substring(pupil.sno,1,len(pupil.sno)-2),
pupil.snoas学号,
snameas姓名,
ssexas性别,
cnameas课程名称,
gradeas分数
frompupil,sc,course
wherepupil.sno=sc.snoando=o
2.利用企业管理器创建一个存储过程stu_info,根据传入的编号,查询某学生的基本信息。
代码如下:
createprocedurestu_info
@stunumchar(10)
as
ifnotexists(select*frompupilwheresno=@stunum)
print‘查无此人!
!
!
!
!
’
else
begin
selectsnoas编号,
snameas姓名,
ssexas性别,
birthdayas出生日期,
polityas政治面貌
frompupil
wheresno=@stunum
end
3.创建一个存储过程stu_age,根据输入的学生姓名,计算该学生的年龄。
Createprocedurestu_age
@stunamechar(10)
as
ifnotexists(select*frompupilwheresname=@stuname)
print‘查无此人!
!
!
!
!
’
else
begin
declare@ageint
select@age=floor(datediff(day,birthday,getdate())/365)
frompupil
wheresname=@stuname
end
4.
创建一个存储过程stu_grade,根据输入的学生编号,返回其选课及其成绩。
Createprocedurestu_grade
@stunumchar(10)
ifnotexists(select*frompupilwheresname=@stuname)
print‘查无此人!
!
!
!
!
’
else
begin
ifnotexists(select*frompupil,scwherepupil.sno=sc.sno)
print‘无此学生的选课信息!
!
!
!
’
else
selectsname,cname,grade
frompupil,course,sc
wherepupil.sno=sc.snoandcourse=cno=o
end
上机实验八
1.创建一个insert触发器,当在pupil表中插入一条新记录时,给出‘你已经插入了一条新记录!
!
!
’的提示信息。
步骤:
程序代码如下:
createtriggerstuinsertonpupil
forinsert
as
declare@msgchar(50)
set@msg=’你已经插入了一条新记录!
!
!
’
print@msg
2.创建一个insert触发器,当在pupil表中插入一条新记录时,不允许在学号中出现重复的编号或出现空值。
程序代码如下:
createtriggerstuinsert1onpupil
forinsert
as
declare@stunumchar(10)
set@stunum=(selectsnofrominserted)
if@stunumisnull
begin
print‘学号不能为空!
!
!
!
’
rollbacktransaction
end
else
begin
declare@numint
set@num=(selectcount(*)frompupilwheresnoin(selectsnofrominserted))
if@num>1
begin
print‘已经有相同的学号,请重新确认!
!
!
!
’
rollbacktransaction
end
else
print‘数据录入成功!
!
!
!
’
end
3.创建一个insert触发器,当在sc表中插入一条新记录时,sno和cno必须是已经存在的学号和课程号,且grade应该在0----100之间。
程序代码如下:
createtriggerscinsertonsc
forinsert
as
declare@gradevaluereal
set@gradevalue=(selectgradefrominserted)
print‘触发器开始工作………………’
ifnotexists(selectsnofrominserted
wheresnoin(selectsnofrompupil))
begin
print‘无此学生的编号,请重新确认!
!
!
’
rollbacktransaction
end
else
begin
ifnotexists(selectcnofrominsertedwherecnoin(selectcnofromcourse))
begin
print‘无此课程的编号,请重新确认!
!
!
’
rollbacktransaction
end
else
begin
if@gradevalue<0or@gradevalue>100
begin
print‘分数有误,请重新确认!
!
!
!
’
rollbacktransaction
end
else
print‘数据插入成功!
!
!
!
’
end
end
4.创建一个after触发器,在pupil表中删除某学生的记录时,删除其相应的选课记录。
程序代码如下:
createtriggerstudeleteonpupil
fordelete
as
declare@stunumchar(10)
select@stunum=snofromdeleted
ifnotexists(select*frompupil,sc
wherepupil.sno=sc.snoandpupil.sno=@stunum)
print‘无此学生的选课记录!
!
!
!
’
else
begin
print‘开始查找并删除该学生相映的选课记录……..‘
deletefromscwheresno=@stunum
print‘该学生的选课记录已经删除!
!
!
!
!
’
end
5.创建一个insteadof触发器,当在course表中上出记录时,不允许删除course表中的数据。
程序代码如下:
createtriggernotallowdelete
oncourse
insteadofdelete
as
print‘insteadof触发器开始工作……………’
print‘course表中的数据不允许删除!
!
!
不能执行删除操作!
!
’
上机实验九
1.使用企业管理器和Transact_SQL语句管理登录帐户
2.使用企业管理器和Transact_SQL语句管理数据库用户
3.使用企业管理器和Transact_SQL语句管理服务器角色和数据库角色
4.使用企业管理器和Transact_SQL语句管理语句权限和对象权限
5.练习创建一个作业。
6.练习创建一个警报。
上机实验十
1.创建一个备份设备。
2.
使用企业管理器对一数据库做一次完全数据备份。
3.
使用企业管理器恢复某一数据库的完全数据备份
上机实验十一
1.导入一个文本文件到SQLServer数据库当中。
2.将SQLServer数据库当中的表导出到access数据库当中。
3.
利用DTS设计器将表从
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SQL 上机 操作 实验