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;