数据库原理及应用实验报告 5.docx
《数据库原理及应用实验报告 5.docx》由会员分享,可在线阅读,更多相关《数据库原理及应用实验报告 5.docx(10页珍藏版)》请在冰豆网上搜索。
数据库原理及应用实验报告5
实验成绩
《数据库系统原理及应用》
实
验
报
告
五
专业班级:
计算机科学与技术
学号:
************
******
********
2013年11月14日
实验五名称:
SQLServer视图和索引
一、实验内容及要求
1.创建视图和查看视图的定义
任务1:
用对象资源管理器管理器方式,创建一个名为“v1”的视图,用于查询计算机网络专业男生的学号、姓名、出生日期,并将视图的列名分别改为:
学生学号、男生姓名、生日。
任务2:
用对象资源管理器管理器方式,创建一个名为“v成绩”的视图,用于查询成绩在60~80之间的学生学号、姓名、专业名、课程名、成绩信息。
任务3:
用命令方式,创建一个名为“V个人最高分”的视图,用于查询每门课程的最高分的学生学号、姓名、课程号、成绩信息。
任务4:
用命令方式,创建一个名为“V全校最高分”的视图,用于查询所有成绩中的最高分的学生学号、姓名、专业名、课程号、成绩。
2.修改视图
任务:
用命令方式,在“v1”的视图中增加两列:
专业和系。
3.使用视图向数据表中插入数据
任务1:
用命令方式,在“V1”视图中添加如下两条记录,注意查看添加的结果。
分析为什么?
(‘020106’,‘李好’,‘1981-04-22’,‘计算机网络’,‘计算机’)
(‘020107’,‘周权’,‘1981-07-08’,‘信息安全’,‘计算机’)
任务2:
用命令方式,在“V1”视图中设置“withcheckoption”属性,然后通过视图向基表中添加如下两条记录,注意查看添加的结果。
(‘020108’,‘赵伟’,‘1980-05-07’,‘计算机网络’,‘计算机’)
(‘020109’,‘刘齐’,‘1981-12-02’,‘信息安全’,‘计算机’)
请思考:
这两条记录能否插入到基表中?
能否在视图中能否显示?
4.使用视图删除数据表中的数据
任务1:
用命令方式或对象资源管理器管理器方式,删除“V1”视图中,学号为‘******’的记录。
任务2:
用命令方式或对象资源管理器管理器方式,删除“v成绩”视图中的记录。
观察会出现什么情况?
为什么?
5.删除视图
要求:
用命令方式或对象资源管理器管理器方式,删除创建的任何一个视图。
6.创建索引
任务1:
在course表的“课程名”列上创建一个非聚集索引,索引名为“ix_kcm”,并降序排列。
任务2:
在course表中,重新创建名为“ix_kcm”的索引,使其成为惟一性的非聚集索引。
任务3:
已知sc表中的“学号”和“课程号”两列已设置为主键,主键约束名为“PK_xs_kc”,请重新创建这两列的组合索引,使学号降序排列,使索引页填满60%后就换新页进行填充。
二、实验目的
掌握创建、修改、删除视图的方法;
掌握查询视图的方法;
掌握用命令方式创建索引的方法
三、实验步骤及运行结果
1.创建视图和查看视图的定义
任务1:
用对象资源管理器管理器方式,创建一个名为“v1”的视图,用于查询计算机网络专业男生的学号、姓名、出生日期,并将视图的列名分别改为:
学生学号、男生姓名、生日。
用对象资源管理器管理器方式,建立的“V1”视图:
运行代码和结果:
select*fromV1
任务2:
用对象资源管理器管理器方式,创建一个名为“v成绩”的视图,用于查询成绩在60~80之间的学生学号、姓名、专业名、课程名、成绩信息。
用对象资源管理器管理器方式,建立的“V成绩”视图:
运行代码和结果:
select*fromV成绩
任务3:
用命令方式,创建一个名为“V个人最高分”的视图,用于查询每门课程的最高分的学生学号、姓名、课程号、成绩信息。
用命令方式,创建的“V个人最高分”的视图代码:
createviewV个人最高分
as
selectst.sno学生学号,sname姓名,cno课程号,sscore成绩信息
fromstudentstjoinscxkonst.sno=xk.sno
wheresscorein(selectMAX(sscore)fromscwhereo=ogroupbycno)
查询代码及运行结果图:
select*fromV个人最高分
任务4:
用命令方式,创建一个名为“V全校最高分”的视图,用于查询所有成绩中的最高分的学生学号、姓名、专业名、课程号、成绩。
用命令方式,创建的“V全校最高分”视图代码:
createviewV全校最高分
as
selectst.sno学生学号,sname姓名,zhname专业,cno课程号,sscore成绩
fromstudentstjoinsconst.sno=sc.sno
wheresscore=(selectMAX(sscore)fromsc)
查询代码及运行结果图:
select*fromV全校最高分
2.修改视图
任务:
用命令方式,在“V1”的视图中增加两列:
专业和系。
用命令方式,在“V1”的视图中增加两列:
专业和系的代码:
alterviewV1
as
selectsno学生学号,sname男生姓名,birthdate生日,zhname专业,sdept系别
fromstudentwherezhname='计算机网络'andssex='男'
查询代码及运行结果图:
select*fromV1
添加前:
添加后:
3.使用视图向数据表中插入数据
任务1:
用命令方式,在“V1”视图中添加如下两条记录,注意查看添加的结果。
分析为什么?
(‘020106’,‘李好’,‘1981-04-22’,‘计算机网络’,‘计算机’)
(‘020107’,‘周权’,‘1981-07-08’,‘信息安全’,‘计算机’)
用命令方式,在“V1”视图中添加如下两条记录代码:
insertintoV1
values('020106','李好','1981-04-22','计算机网络','计算机')
insertintoV1
values('020107','周权','1981-07-08','信息安全','计算机')
运行结果图:
添加的结果图:
分析:
因为‘周权’的记录不满足视图的定义,即视图中只显示“计算机网络”专业的学生信息,所以‘周权’的信息只能在基表中看到,而不能在视图中看到。
任务2:
用命令方式,在“V1”视图中设置“withcheckoption”属性,然后通过视图向基表中添加如下两条记录,注意查看添加的结果。
(‘020108’,‘赵伟’,‘1980-05-07’,‘计算机网络’,‘计算机’)
(‘020109’,‘刘齐’,‘1981-12-02’,‘信息安全’,‘计算机’)
用命令方式,在“V1”视图中设置“withcheckoption”属性:
alterviewV1
as
selectsno学生学号,sname男生姓名,birthdate生日,zhname专业,sdept系别
fromstudentwherezhname='计算机网络'andssex='男'
withcheckoption
像基表中添加内容的代码如下:
insertintoV1
values('020108','赵伟','1980-05-07','计算机网络','计算机')
insertintoV1
values('020109','刘齐','1981-12-02','信息安全','计算机')
试图进行的插入或更新已失败,原因是目标视图或者目标视图所跨越的某一视图指定了WITHCHECKOPTION,而该操作的一个或多个结果行又不符合CHECKOPTION约束。
语句已终止。
运行结果图:
请思考:
这两条记录能否插入到基表中?
能否在视图中能否显示?
“赵伟”的信息既能插入到基表中,也能在视图中看到。
但“刘齐”的信息都不能,且系统会提示错误。
因为withcheckoption强制针对视图执行的所有数据修改都必须符合在select_statement中设置的条件。
4.使用视图删除数据表中的数据
任务1:
用命令方式或对象资源管理器管理器方式,删除“V1”视图中,学号为‘******’的记录。
运行结果图和代码:
deletefromV1where学生学号='020108'
运行前:
运行后:
任务2:
用命令方式或对象资源管理器管理器方式,删除“v成绩”视图中的记录。
观察会出现什么情况?
为什么?
删除“v成绩”视图中的记录的代码:
deletefromV成绩where学生学号='201116910231'
运行结果图:
因为:
如果视图引用了多个表时,无法用delete命令删除数据。
5.删除视图
要求:
用命令方式或对象资源管理器管理器方式,删除创建的任何一个视图。
用命令方式删除创建的“V全校最高分”视图的代码和运行结果:
dropviewV全校最高分
6.创建索引
任务1:
在course表的“课程名”列上创建一个非聚集索引,索引名为“ix_kcm”,并降序排列。
创建索引的代码和截图:
use学生数据库
go
createindexix_kcmoncourse(cnamedesc)
Go
任务2:
在course表中,重新创建名为“ix_kcm”的索引,使其成为惟一性的非聚集索引。
创建索引的代码和截图:
use学生数据库
go
createuniqueindexix_kcmoncourse(cnamedesc)
Go
任务3:
已知sc表中的“学号”和“课程号”两列已设置为主键,主键约束名为“PK_xs_kc”,请重新创建这两列的组合索引,使学号降序排列,使索引页填满60%后就换新页进行填充。
创建索引的代码和截图:
createindexix_group_xi
onsc(snodesc,cno)
withpad_index,
fillfactor=60
四、实验心得
这次实验主要是对SQLserver2008的视图和索引功能,这两项都跟查询有密切的关系。
不同创建视图的方法,视图创建后的查看、修改、删除等操作,根据不同的需要来调整视图的显示。
一开始的我,对于创建这些是手忙脚乱的,翻阅了好多的资料才更加深入的了解了试图和索引的使用方法。
索引创建,并在创建过程中体会其创建的原则,索引的查看、删除等操作。
这次实验使我对SQLserver2008的查询系统有了进一步的了解,对使用SQLserver2008不同功能进行更有效率的查询有了更深的了解。