实验7 数据库视图的定义与使用
7.1实验目的及要求
掌握视图的用法,加深对视图作用的理解
7.2实验内容
1.创建、修改和删除视图
2.利用视图进行查询
7.3.1视图的创建(查看视图结果用select语句)
1.创建网络工程学生信息的视图;
Create view IS_Student as select sno,sname,sage from student where sdept=’网络工程’;
2.创建网络工程选修了1号课程的学生的视图;
Create view IS_S1 as select student.sno,cno,grade from student,sc where student.sno=sc.sno and sdept=’网络工程’ and cno=’1’;
3.建立网络工程选修了1号课程且成绩在90分以上的学生的视图:
Create view IS_S2 as select * from IS_S1 where grade>=90;
4.创建一个反映学生出生年份的视图;
Create view BT_S(sno,sname,出生年份)as select sno,sname,year(now())-sage from student;
5.将所有女生的记录定义为一个视图:
Create view F_student as select * from student where ssex=’女’;
6.将所有学生的学号和他的平均成绩定义为一个视图;
Create view S_G(sno,avg_grade) as select sno,avg(grade) from sc group by sno;
7.3.2视图结构的修改
7.将视图F_student修改为网络工程的所有女士的视图
Alter view F_student as select * from student where ssex=’女’and sdept=’网络工程’;
说明:视图结构的修改的AS后的select语句与创建视图的完全一致,引入结构修改的目的是 了避免与视图相关的数据库对象的变换,如触发器,关联等。
7.3.3 视图查询
8.在网络工程的学生视图中查询年龄小于20岁的学生;
Select * from IS_student where sage<20;
9.查询网络工程选修了1号课程的学生;
Select sc.cno,sname from IS_Student,sc Where IS_Student.sno=sc.sno and cno=’1’;
10.在视图S_G中查询平均成绩在90分以上的学生的学号和平均成绩
select * from S_G where avg_grade>=90;
7.3.4更新视图
11.将网络工程学生视图IS_Student中学号为“12002”的学生姓名改为“刘辰”
Update IS_student set sname=”刘辰” where sno=’12002’;
比较:update IS_Student set sname=’刘辰’where sno=’12003’次语句不能实现数据的更新为什么?
12.向网络工程学生视图IS_Student 中插入一个新的学生的记录,学号为12009,姓名为“赵新”,年龄为20岁。
Insert into IS_Student values(‘12009’,‘赵新’,20);
//此处执行后显示Field of vew ‘xsgl.is_student’underlying table doesn’t have a default value,即在此视图中插入数据不能使基础表获得默认数值;
13.删除网络工程学生视图IS_Student 中学号为12009的学生的记录;
Delete from IS_student where sno=’12009’;(能删除成功吗,存在什么问题吗?)
7.3.5更新视图
14.删除视图IS_student;
Drop view IS_student;
思考: