1、(9)删除视图S_GRADE。(10)通过视图S_GIRL,将“王丹”的名字修改为“汪丹”,并查询结果。(11)通过视图S_GIRL,新增一个学生信息(“刘兰兰”,“女”,“计算机学院”,1996-8-8),并查询结果。(12)通过视图S_GIRL,删除1995年出生的女生信息,并查询结果。(13)通过视图S_GRADE,将“汪丹”的名字修改为“王丹”,是否可以实现,请说明原因。(14)通过视图COMPUTE_AVG_GRADE,将“4121090301”学生的平均分改为90分,是否可以实现,请说明原因。四 实验要求1 要求掌握索引的类型,以及创建索引时的注意事项,例如每个表只能创建一个聚集索
2、引,可以创建非聚集索引最多为249个,等等。2 理解创建视图的目的和意义。掌握创建视图时需要考虑的原则:只能在当前数据库中创建视图、视图名不得与该用户的表名相同、可在视图上建立视图、定义视图不能包括ORDER BY等关键字、不能建立临时视图,等等。3 报告中由同学写明具体的操作意图(文字描述)、操作命令(SQL语句)、和执行结果(文字描述+适当截图)。4 对于重要的运行界面和结果窗口,可以用Alt+PrintScreen来截取当前窗口,并粘贴到实验报告中。五 实验步骤:1.索引的建立和删除操作2.在S表中,建立按照sno升序的惟一性索引snoIDX。create unique index sn
3、oIDX on S(Sno asc);运行结果:结果显示如图1:图表 1 建立索引snoIDX3.在SC表中,建立按照学号升序和课程号降序的唯一性索引scIDX。代码:create index scIDX on SC(Sno asc,Cno desc);命令已成功完成。结果显示如图2:图表 2在SC表建立索引scIDX。4.在S表中,按照生日建立一个非聚簇索引birthdayIDX。create NONCLUSTERED index birthdayIDX on S(Sbirthday asc);显示结果如图3所示图表 3建立索引birthdayIDX5.在C表中,建立一个按照课程名升序的聚簇
4、索引cnameIDX。create CLUSTERED index cnameIDX on C(Cno asc);显示结果如图4:图表 4按照课程名升序的聚簇索引cnameIDX。6.删除索引cnameIDX。drop index C.cnameIDX显示结果如图5,无索引,被删除:图表 57.视图的创建、修改、更新和查询操作8.建立一个关于所有女生信息的视图S_GIRL。create view S_GIRL as select * from S where S.Ssex=女;服务器: 消息 170,级别 15,状态 1,过程 S_GIRL,行 3第 3 行: 附近有语法错误。删除“;” se
5、lect * from S where Ssex=查询显示结果: select * from S_GIRL符合条件的结果如下图6所示:图表 69.将各系学生人数,平均年龄定义为视图V_NUM_AVGcreate view V_NUM_AVG as select count(Sno) ,avg(Sage),Sdept from S group by Sdept 消息 4511,级别 16,状态 1,过程 V_NUM_AVG,行 1创建视图或函数失败,因为没有为第 1 列指定列名。正确代码: create view V_NUM_AVG as select count(Sno) DeptNum ,a
6、vg(Sage) Dept,Sdept显示结果select * from V_NUM_AVG如图7所示DeptNum为各系学生人数,Dep为平均年龄图表 710.建立一个视图反映学生所选课程的总学分情况TOTAL_CREDIT。create view TOTAL_CREDIT as select Sno, sum(Ccredit) as total_credit from SC join C on C.Cno=SC.Cnogroup by Sno显示结果如图8所示TOTAL_CREDIT为学生所选课程的总学分情况:图表 811.建立一个所有学生课程成绩的视图S_GRADE,包括基本学生信息,课
7、程信息和成绩。create view S_GRADE as select S.Sno,S.Sname,C.Cname,C.Ccredit,SC.Gradefrom SC ,C,Swhere S.Sno=SC.Sno and SC.Cno=C.Cno显示结果:select * from S_GRADE结果如图9所示:基本信息,课程信息和成绩图表 912.在视图S_GRADE基础之上,建立一个两门课以上成绩不及格的学生情况视图FAIL_GRADE。create view FAIL_GRADE as select Sno,count(*)SnoNum from S_GRADE where Grade
8、=2查询视图符合条件的结果:select * from FAIL_GRADE如下图所示,没有符合选修两门且不及格的学生信息图表 1013.建立一个至少选修了2门课及2门课以上的学生信息的视图SC_FOUR。create view SC_FOURselect Sno,count(*)CnoNum from SC select * from SC_FOUR显示结果如下图11:学号为0001得学生选修3门,0002学生和0003学生选修了3门;图表 11查询四门以上,数据库中没有符合条件的学生14.修改视图S_GIRL,要求只显示1997年以前出生的女生信息。alter view S_GIRL se
9、lect * from S where Ssex=and Sbirthday2在视图FAIL_GRADE不存在不及格超过2门课;图表 1316.删除视图S_GRADE。修改前数据库中存在的视图14如下图所示:图表 14drop view S_GRADE删除视图后,数据库中存在的视图如下图15所示:不存在S_GRADE视图图表 1517.通过视图S_GIRL,将“王思”的名字修改为“汪思”,并查询结果。修改前:视图S_GIRL基本情况如下图所示:图表 16alter view S_GIRLset Sname=汪思where Sname=王思 消息 156,级别 15,状态 1,过程 S_GIRL
10、,行 4set语句错误:应用update ,update 后不用加view as update S_GIRL(所影响的行数为 1 行)显示结果如图17红色标记所示:图表 1718.通过视图S_GIRL,新增一个学生信息(“刘兰兰”,“女”,“计算机学院”,1996-8-8),并查询结果。insert into S_GIRL (Sno,Sname,Ssex,Sbirthday,Sdept) values (0020,刘兰兰1996-8-8计算机)结果显示如图:19.通过视图S_GIRL,删除1996年出生的女生信息,并查询结果。运行前信息如上图所示:delete S_GIRL where Sbi
11、rthday1996-1-1显示结果如下图:标记所示信息被删除20.通过视图S_GRADE,将“汪思”的名字修改为“王思”,是否可以实现,请说明原因update S_GRADE set Sname= where Sname=(所影响的行数为1 行)若是基于多个表的视图、涉及关键字段则不能修改表信息21.通过视图COMPUTE_AVG_GRADE,将“0001”学生的平均分改为90分,是否可以实现,请说明原因。创建视图:create view COMPUTE_AVG_GRADE select SC.Sno,avg(SC.Grade)AS 平均成绩from SC,C,Sgroup by SC.Sn
12、o显示视图信息;修改视图:update COMPUTE_AVG_GRADE set 平均成绩=91 where Sno=0001 消息 4403,级别 16,状态 1,行 1视图或函数 COMPUTE_AVG_GRADE 不可更新,因为它包含聚合。视图不能修改数据。关于可更新视图有以下三条规则:(1) 若视图是基于多个表使用联接操作而导出的,那么对这个视图执行更新操作时,每次只能影响其中的一个表。(2) 若视图导出时包含有分组和聚合操作,则不允许对这个视图执行更新操作。(3) 若视图是从一个表经选择、投影而导出的,并在视图中包含了表的主键字或某个候选键,这类视图称为行列子集视图。对这类视图可执行更新操作。上题不能修改,因为视图导出时包含有分组和聚合操作,不允许对这个视图执行更新操作
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2