SQL实验三数据的更新操作和视图实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三数据的更新操作和视图本实验需要2学时。
一、实验目的
1、掌握视图的创建、修改和删除操作。
2、掌握数据库数据更新(增加、修改、删除)操作。
二、实验内容和步骤
1、视图
(1)建立名为UV_SC的视图。该视图可以让我们看到每个学生的姓名、选修课程名和成绩。
(2)利用UV_SC视图,查看平均成绩在80分以上的学生姓名。
(3)建立名为UV_Course的视图,该视图显示每门课的课程名和选修该课程的学生人数。
(4)修改视图UV_Course,在视图中增加一列,显示选修该课程所有学生的平均成绩。
(5)建立名为UV_IS_Depart的视图。该视图可以用来查看“信息系”的学生的学号、姓名、年龄和系名。并保证对该视图的修改满足系名为信息系的条件。
(6)建立名为UV_Student的加密视图。该视图可以用来查看每个学生选修的课程门数和平均成绩。
(7)利用UV_Student视图,查询平均成绩在80分以上的学生学号。
(8)能否利用视图UV_Student,修改某个学生的平均成绩?
(9)删除视图UV_Student。
2、数据更新
(1)向STUDENT表增加如下记录:
(3)建立与表STUDENT 同结构的空表STUD。然后利用INSERT命令把表STUDENT中年龄大于
19的学生记录添加到表STUD。(注意:可以使用select into语句实现同结构空表的创建,再使用insert命令插入记录;或者使用单条select into语句实现等同的功能)
(4)为“ 95002”的学生增加选修“操作系统”和“数据结构”这两门课的选课记录。
(5)把课程名为“操作系统”的成绩从成绩表SC中删除。(试用三种方式完成)
(6)将女生的成绩提高10%。(试用三种方式完成)
(7)如果学生“张三”的数据结构的成绩低于65,则加上10分。
(8)将成绩最低的学生的成绩加上10分。
(9)将前3名成绩最高的学生的成绩减去10分。
(10)为没有选课的学生自动增加选修“01”课程的选课记录。
(11)把选修“数学"不及格的成绩全部改成空值。
(12)删除成绩低于总平均成绩的女生的选课记录。
三、实验环境
四、调试过程
五、实验结果
六、总结
通过此次实验:
1. 我知道了视图不是一张真实的表格,是一个虚拟的存在形式。
2. 掌握了对视图的创建(create or replace ):当视图不存在时可使用create进行创建;而如
果不确定视图是否已存在,但此时又需要建立一张此名称的视图时,可使用replace创建,如果视图名已存在也不会出现冲突,而是进行替换。
3. 在创建视图时如果使用了with check option 表示在视图上执行UPDATE INSERT或
DELETES作时,要保证所修改的行满足视图定义中的谓词条件,即SELECT^询子句中的限定条件:如Where条件,这样可以确保数据修改后仍可通过视图看到修改的数据。
4. 分清楚了对视图结构的修改(alter )、对视图数据的修改(update )。同时对视图上的计算
列、内置函数列和行集合函数列不能修改。
5. 知道了对视图数据的删除操作(delete )。
6. 通过第二题的训练也使我对数据库数据的更新语句有了更多的体会和认识。
7. 第二题第五小题,要求三种方法,只写出了两种,第三种有点没辙。而其他题目有的没要
求,因为在思考过程有别的思路,也有多写了相关方法。
附录:
--1 、视图
--(1 )建立名为UV_SC的视图。该视图可以让我们看到每个学生的姓名、选修课程名和成绩。
create view UV_SC
as
select sname , cname , grade
from student s , course c , sc
where s . sno =sc . sno and c . eno =sc . eno
select * from UV_SC
--(2)利用UV_SC视图,查看平均成绩在分以上的学生姓名。
select sn ame
from UV_SC
group by sname
having avg ( grade )> 80
--(3 )建立名为UV Course 的视图,该视图显示每门课的课程名和选修该课程的学生人
数。
create view UV_Course
as
select cname , count (*) as '选修人数'
from course c , sc
where c . eno =sc . eno
group by cname
select * from UV_Course
--(4 )修改视图UV_Course ,在视图中增加一列,显示选修该课程所有学生的平均成绩。
alter view UV_Course
as
select cname , count (*) as '选修人数',avg (grade ) as '平均成绩’
from course c , sc
where c . eno =sc . eno
group by ename
select * from UV_Course
-- (5 )建立名为UV_IS_Depart 的视图。该视图可以用来查看“信息系”的学生的学号、姓名、年龄和系名。并保证对该视图的修改满足系名为信息系的条件。
create view UV_IS_Depart
as
select sno , sname , sage , sdept
from student s where sdept =' 信息系' with check option select * from UV_IS_Depart
-- (6 )建立名为UV_Student 的加密视图。该视图可以用来查看每个学生选修的课程门数和平均成绩。create view
UV_Student ( sno , course_no , avg_grade ) with encryption
as
select sno , count (*), avg ( grade )
from sc
group by sno
select * from UV_Student
-- (7 )利用UV_Student 视图,查询平均成绩在分以上的学生学号。
select sno
from UV_Student
where avg_grade >= 80
-- (8 )能否利用视图UV_Student ,修改某个学生的平均成绩?
update UV_Student
set avg_grade =70
where sno = 95001
-- (9 )删除视图UV_Student 。
drop view UV_Student
--2 、数据更新
--(1 )向STUDENT表增加如下记录:
--Sno Sname Ssex Sage Saddress Sdept
--95011 王一鸣男20 福州市计算机系
insert into student ( sno , sname , ssex , sage , saddress , sdept )
values ( '95011' , ' 王一鸣' , ' 男' , 20, ' 福州市' , ' 计算机系' )
alter table student
add saddress varchar ( 50 ) null -- 修改表结构,增加saddress 列select *
from student
where sno ='9501 1 '
--(2 )将学号’’,成绩,以及课程表中的所有课程号插入到SC表中。
insert into sc ( sno , cno , grade )
select '95011' , cno , 80
from course
select * from sc
--(3 )建立与表STUDENT同结构的空表STUD。然后利用INSERT命令把表STUDENT中年龄大于的学生记录添加到