SQL实验三数据的更新操作和视图实验报告.docx
- 文档编号:28188815
- 上传时间:2023-07-09
- 格式:DOCX
- 页数:20
- 大小:2.54MB
SQL实验三数据的更新操作和视图实验报告.docx
《SQL实验三数据的更新操作和视图实验报告.docx》由会员分享,可在线阅读,更多相关《SQL实验三数据的更新操作和视图实验报告.docx(20页珍藏版)》请在冰豆网上搜索。
SQL实验三数据的更新操作和视图实验报告
实验三数据的更新操作和视图
本实验需要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表增加如下记录:
Sno
Sname
Ssex
Sage
Saddress
Sdept
95011
王一鸣
男
20
福州市
电脑系
〔2〕将学号’95011’,成绩80,以及课程表中的所有课程号插入到SC表中。
〔3〕建立与表STUDENT同结构的空表STUD。
然后利用INSERT命令把表STUDENT中年龄大于19的学生记录添加到表STUD。
〔注意:
可以使用selectinto语句实现同结构空表的创建,再使用insert命令插入记录;或者使用单条selectinto语句实现等同的功能〕
〔4〕为“95002”的学生增加选修“操作系统”和“数据结构”这两门课的选课记录。
〔5〕把课程名为“操作系统”的成绩从成绩表SC中删除。
〔试用三种方式完成〕
〔6〕将女生的成绩提高10%。
〔试用三种方式完成〕
〔7〕如果学生“张三”的数据结构的成绩低于65,则加上10分。
〔8〕将成绩最低的学生的成绩加上10分。
〔9〕将前3名成绩最高的学生的成绩减去10分。
〔10〕为没有选课的学生自动增加选修“01”课程的选课记录。
〔11〕把选修“数学”不及格的成绩全部改成空值。
〔12〕删除成绩低于总平均成绩的女生的选课记录。
三、实验环境
四、调试过程
五、实验结果
六、总结
通过此次实验:
1.我知道了视图不是一张真实的表格,是一个虚拟的存在形式。
2.掌握了对视图的创建〔createorreplace〕:
当视图不存在时可使用create进行创建;而如果不确定视图是否已存在,但此时又需要建立一张此名称的视图时,可使用replace创建,如果视图名已存在也不会出现冲突,而是进行替换。
3.在创建视图时如果使用了withcheckoption表示在视图上执行UPDATEINSERT或DELETE操作时,要保证所修改的行满足视图定义中的谓词条件,即SELECT查询子句中的限定条件:
如Where条件,这样可以确保数据修改后仍可通过视图看到修改的数据。
4.分清楚了对视图结构的修改〔alter〕、对视图数据的修改〔update〕。
同时对视图上的计算列、内置函数列和行集合函数列不能修改。
5.知道了对视图数据的删除操作〔delete〕。
6.通过第二题的训练也使我对数据库数据的更新语句有了更多的体会和认识。
7.第二题第五小题,要求三种方法,只写出了两种,第三种有点没辙。
而其他题目有的没要求,因为在思考过程有别的思路,也有多写了相关方法。
附录:
--1、视图
--〔1〕建立名为UV_SC的视图。
该视图可以让我们看到每个学生的、选修课程名和成绩。
createviewUV_SC
as
selectsname,cname,grade
fromstudents,coursec,sc
wheres.sno=sc.snoandco=sco
select*fromUV_SC
--〔2〕利用UV_SC视图,查看平均成绩在分以上的学生。
selectsname
fromUV_SC
groupbysname
havingavg(grade)>80
--〔3〕建立名为UV_Course的视图,该视图显示每门课的课程名和选修该课程的学生人数。
createviewUV_Course
as
selectcname,count(*)as'选修人数'
fromcoursec,sc
whereco=sco
groupbycname
select*fromUV_Course
--〔4〕修改视图UV_Course,在视图中增加一列,显示选修该课程所有学生的平均成绩。
alterviewUV_Course
as
selectcname,count(*)as'选修人数',avg(grade)as'平均成绩'
fromcoursec,sc
whereco=sco
groupbycname
select*fromUV_Course
--〔5〕建立名为UV_IS_Depart的视图。
该视图可以用来查看“信息系”的学生的学号、、年龄和系名。
并保证对该视图的修改满足系名为信息系的条件。
createviewUV_IS_Depart
as
selectsno,sname,sage,sdept
fromstudents
wheresdept='信息系'
withcheckoption
select*fromUV_IS_Depart
--〔6〕建立名为UV_Student的加密视图。
该视图可以用来查看每个学生选修的课程门数和平均成绩。
createviewUV_Student(sno,course_no,avg_grade)
withencryption
as
selectsno,count(*),avg(grade)
fromsc
groupbysno
select*fromUV_Student
--〔7〕利用UV_Student视图,查询平均成绩在分以上的学生学号。
selectsno
fromUV_Student
whereavg_grade>=80
--〔8〕能否利用视图UV_Student,修改某个学生的平均成绩?
updateUV_Student
setavg_grade=70
wheresno=95001
--〔9〕删除视图UV_Student。
dropviewUV_Student
--2、数据更新
--〔1〕向STUDENT表增加如下记录:
--SnoSnameSsexSageSaddressSdept
--95011王一鸣男20福州市电脑系
insertintostudent(sno,sname,ssex,sage,saddress,sdept)
values('95011','王一鸣','男',20,'福州市','电脑系')
altertablestudent
addsaddressvarchar(50)null--修改表结构,增加saddress列
select*
fromstudent
wheresno='95011'
--〔2〕将学号’’,成绩,以及课程表中的所有课程号插入到SC表中。
insertintosc(sno,cno,grade)
select'95011',cno,80
fromcourse
select*fromsc
--〔3〕建立与表STUDENT同结构的空表STUD。
然后利用INSERT命令把表STUDENT中年龄大于的学生记录添加到表STUD。
〔注意:
可以使用selectinto语句实现同结构空表的创建,再使用insert命令插入记录;或者使用单条selectinto语句实现等同的功能〕
--法一
select*intoSTUD
fromstudent
wheresage>19
--法二
select*intoSTUD
fromstudent
where1=0
insertintoSTUD(sno,sname,sage,ssex,sdept,saddress)
selectsno,sname,sage,ssex,sdept,saddress
fromstudent
wheresage>19
select*fromSTUD
--〔4〕为“”的学生增加选修“操作系统”和“数据结构”这两门课的选课记录。
insertintosc(sno,cno,grade)
select'95002',cno,null
fromcourse
wherecname='操作系统'orcname='数据结构'
select*fromsc
--〔5〕把课程名为“操作系统”的成绩从成绩表SC中删除。
〔试用三种方式完成〕
--法一
deletefromsc
wherecnoin
(
selectcno
fromcourse
wherecname='操作系统'
)
--法二
deletefromsc
whereexists
(
selectcno
fromcoursec
wherecname='操作系统'andco=sco
)
--法三
--〔6〕将女生的成绩提高%。
〔试用三种方式完成〕
--法一
updatesc
setgrade=grade*1.1
wheresnoin
(
selectsno
fromstudent
wheressex='女'
)
--法二
updatesc
setgrade=grade*1.1
whereexists
(
selectsno
fromstudents
wheressex='女'ands.sno=sc.sno
)
--法三
updatesc
setgrade=grade*1.1
where
(
selectcount(*)
fromstudents
wheres.sno=sc.snoandssex='女'
)=(selectcount(*)fromcoursewherecno=sco)
--〔7〕如果学生“张三”的数据结构的成绩低于,则加上分。
updatesc
setgrade=grade+10
whereexists
(
selectsno
fromstudents
wheres.sno=sc.snoandsname='张三'
andcnoin
(
selectcno
fromcourse
wherecname='数据结构'
)
)
--查看结果
selectsname,cname,grade
fromstudents,coursec,sc
wheres.sno=sc.snoandco=scoandsname='张三'andcname='数据结构'
--〔8〕将成绩最低的学生的成绩加上分。
updatesc
setgrade=grade+10
wheregradein
(
selectmin(grade)
fromsc
)
--〔9〕将前名成绩最高的学生的成绩减去分。
updatesc
setgrade=grade-10
wheregradein
(
selecttop3grade
fromsc
orderbygradedesc
)
--〔10〕为没有选课的学生自动增加选修“”课程的选课记录。
insertintosc(sno,cno,grade)
selectsno,'01',null
fromstudent
wheresnonotin
(
selectdistinct(sno)--不显示重复值
fromsc
)
select*fromsc
--〔11〕把选修“数学”不及格的成绩全部改成空值。
updatesc
setgrade=null
wheresnoin
(
selectsno
fromcoursec
wheresco=coandcname='数学'andgrade<60
)
--〔12〕删除成绩低于总平均成绩的女生的选课记录。
--法一
deletefromsc--删除该女生成绩低于总平均成绩的该选修记录
wheresnoin
(
selects.sno
fromstudents
wheresc.sno=s.snoandssex='女'
groupbys.sno,grade
havinggrade<(selectavg(grade)fromsc)
)
--法二
deletefromsc--删除该女生成绩低于总平均成绩的该选修记录
whereexists
(
selects.sno
fromstudents
wheressex='女'andgrade<(selectavg(grade)fromsc)andsc.sno=s.sno
)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SQL 实验 数据 更新 操作 视图 报告