实验四-索引与视图

1. (简答题, 5分)创建专业表,包括专业号(SID)、专业名(spec)、学院(college)属性,其中专业号为主码,在创建表的同时为专业名创建索引spec_index。

create table dept

(SID char(10) primary key,

 spec varchar(20),

 college varchar(20),

 index spec_index(spec asc));

2. (简答题, 5分)从stc表查询选修了教师号为101的教师所讲授课程的学号,查看该查询的执行时间并截取运行结果图。

3. (简答题, 5分)为stc表中的Tno属性创建索引tno_index。

create index tno_index

on stc(Tno);

 4. (简答题, 5分)为stc表中的Tno属性创建索引tno_index;再从stc表查询选修了教师号为101的教师所讲授课程的学号时,查看该查询的执行时间并截图,体会索引的作用。

 5. (简答题, 10分)为courses表中的cname属性创建长度为3的索引cname3_index(用Create index方法)

create index cname3_index

on courses(cname(3));

 6. (简答题, 5分)为courses表中的cname属性创建索引cname_index(用Alter table方法)。

ALTER table courses

add index cname_index (cname);

 7. (简答题, 10分)在courses表中查询课程名为“数据库系统”课程的学时,查看系统使用的是哪个索引。

 

8. (简答题, 5分)删除courses表的cname_index索引。

drop index cname_index on courses

 

9. (简答题, 5分)定义视图v1:包括成绩60分及以上的学生学号、课程号和成绩(不带with check option)。

create view v1

AS 

  select sno,cno,score

  from stc

  where score>=60;

 10. (简答题, 5分)定义视图v2:包括每门课程的课号、选课人数和平均成绩(必要时设置列别名)。

create view v2

AS 

  select cno ,count(*) num,AVG(score) avgscore

  from stc

  group by cno;

或者:

create view v2(cno,num,avgscore)

AS 

  select cno ,count(*),AVG(score)

  from stc

  group by cno;

 11. (简答题, 5分)利用视图查询v1,查询所有选修 “C程序设计”课程及格的学生学号。

select sno

  from v1 NATURAL join courses

  where cname='C程序设计';

或者:

select sno

  from v1 , courses

  where v1.cno=courses.cno and cname='C程序设计';

 12. (简答题, 5分)定义视图v1_check,要求与第1题创建视图v1相同,只是增加“WITH CHECK OPTION”子句

create view v1_check

AS 

  select sno,cno,score

  from stc

  where score>=60

  WITH CHECK OPTION;

 

13. (简答题, 5分)利用v1_check视图,将学号和课号分别为(201615121,B001)那条记录的成绩进行如下修改

(1)将该记录的成绩改为50,能否成功?观察执行结果

(2)将该记录的成绩改为99,能否成功?观察执行结果

(3)分析原因。

提示:(1)执行前后分别查看操作的视图和相应基本表中的记录。

          (2)需要给出修改成功的那条语句代码。

我的答案:

  update v1_check

  set score=99

  where sno='201615121' and cno='B001';

(1)不能  

(2)能

(3)因为创建视图带有with check option短语,要求对这样的视图进行数据更新时,更新后的数据仍然要满足创建视图的条件,而本视图的条件是score>=60,50不满足这个条件,因此不能执行;99满足,可执行。

 

14. (简答题, 5分)利用V1将学号和课号分别为(201615121,B002)的成绩改为50,观察执行结果。

(1)给出修改成绩的代码

(2)在哪里能看到修改成功后的数据?为什么?

(3)分析V1为什么能修改成功?。 

我的答案:

(1)update v1

         set score=50

         where sno='201615121' and cno='B002';

(2)表。因为视图中只显示满足条件的数据,而这条记录不满足条件,因此不显示。

(3)因为v1视图没带with check option强制检查的要求。

15. (简答题, 10分)利用V2视图,将B001号课程的平均成绩改为80,能否执行成功?为什么? 

 

(1)不能

(2)因为v2视图中含有集合函数和group by子句,为不可更新视图。

 

16. (简答题, 10分)

定义视图V3,包括每个学生的学号、姓名和已经修得的总学分。

提示:每16个学时为一个学分,即每门课程的学分=学时/16

create view v3 

as

select sno,sname,sum(chour)/16 scredit

from students NATURAL join stc NATURAL join courses

where score>=60

group by sno;

或者:

create view v3 (学号,姓名,学分)

as

select sno,sname,sum(chour)/16

from students NATURAL join stc NATURAL join courses

where score>=60

group by sno;

 

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值