数据库实验报告.docx
《数据库实验报告.docx》由会员分享,可在线阅读,更多相关《数据库实验报告.docx(11页珍藏版)》请在冰豆网上搜索。
![数据库实验报告.docx](https://file1.bdocx.com/fileroot1/2022-12/6/6e4c4660-2db7-434e-a09d-01b624836210/6e4c4660-2db7-434e-a09d-01b6248362101.gif)
数据库实验报告
数据库系统原理
实验报告
实验名称:
视图和游标操作的实验
任课教师:
霍纬刚
学号:
100341324
姓名:
汪何媛
完成日期:
2012.11.3
实验名称:
视图和游标操作的实验
一、实验目的
1、理解视图的作用,能够根据实际需求用SQL创建视图
2、对基本表按需定义视图,并理解可以通过视图实现对基本表的操作
3、通过QRACLE环境下的游标操作,理解SQL的游标概念;
4、综合运用SQL的DML命令,通过游标操作数据库。
二、实验内容与步骤
1、进入QRACLE的SQL*PLUS环境;
2、用于Createview语句定义视图;
(1)建立信息系学生的视图,然后向其中插入一计算机系学生数据,分别查看视图和基本表;
(2)建立信息系学生的视图,并要求进行修改和插入操作时仍需保证该视图只有信息系学生,然后向其中插入一计算机系学生,比较
(1),
(2)的不同;
(3)建立信息系选修了1号课程且成绩在90分以上的学生的视图;
(4)将学生的学号及他的平均成绩定义为一个视图S_G;
(5)将SC表中成绩在相应课程平均成绩之上的元组定义成一个视图GOOD-SC;
3、通过视图对表进行操作
(1)在信息系学生的视图中找出年龄小于20岁的学生;
(2)查询信息系选修了1号课程且成绩在90分以上的学生;
(3)在S_G视图中查询平均成绩在90分以上的学生学号和平均成绩;
(4)创建CS-KC视图,包括计算机专业各学生的学号、其选修的课程号及成绩,要保证对该视图的修改都要符合专业名为“计算机”这个条件;
(5)查找计算机专业的学生学号和选修的课程号;
(6)向S-G视图中插入一元组。
4、游标的操作
(1)用简单循环控制从EMP表中取出某一部门的员工姓名和工资,存入TEMP表中;
(2)采用FOR循环重做上题;
(3)游标的FOR循环内使用查询;
(4)查询EMP表某部门的雇员情况,如果某雇员的工资小于800,掌握将其工资设为800;
(5)为职工涨10%的工资。
从最低工资开始涨,最后工资总额限制在50万元以内;
(6)根据DEPT表中返回的部门号,从EMP表中查询该部门的雇员情况,使用带参数的游标;
(7)统计EMP表中工资大于3000的记录数,而且给工资增长10%。
三、实验结果与结论
2、用于Createview语句定义视图
(1)建立信息系学生的视图,然后向其中插入一计算机系学生数据,分别查看视图和基本表
createviewIS_pc
2>as
3>selectsno,sname,ssex,sage,sdept
4>froms
5>wheresdept='pc'
insertintoIS_pcvalues('014','李昕','女','19','ac');
处理了1行。
(2)建立信息系学生的视图,并要求进行修改和插入操作时仍需保证该视图只有信息系学生,然后向其中插入一计算机系学生,比较
(1),
(2)的不同;
SQLWKS>createviewIS_ac
2>as
3>selectsno,sname,ssex,sage,sdept
4>froms
5>wheresdept='ac'
6>withcheckoption
SQLWKS>insertintoIS_acvalues('014','班国龙','男','20','pc');
ORA-01402:
视图WITHCHECKOPTIDN违反where子句
(3)建立信息系选修了1号课程且成绩在90分以上的学生的视图;
SQLWKS>createviewIS_S1(sno,sname,grade)
2>as
3>selects.sno,sname,grade
4>froms,sc
5>wheresdept='IS'
6>ands.sno=sc.sno
7>ando='1';
SQLWKS>createviewIS_S2
2>as
3>selectsno,sname,grade
4>fromIS_S1
5>wheregrade>=90;
select*fromIS_S2;
SNOSNAMEGRADE
-------------------------
已选择0行。
(4)将学生的学号及他的平均成绩定义为一个视图S_G;
SQLWKS>createviewS_G(sno,Gavg)
2>as
3>selectsno,AVG(grade)
4>fromsc
5>groupbysno;
语句已处理。
SQLWKS>select*fromS_G;
SNOGAVG
---------------
00185
00289
00375
00493
00581
00663
00782
00884
00995
01083
已选择10行。
(5)将SC表中成绩在相应课程平均成绩之上的元组定义成一个视图GOOD-SC;
SQLWKS>createviewC_G(cno,Gavg)
2>as
3>selectcno,AVG(grade)
4>fromsc
5>groupbycno;
语句已处理。
SQLWKS>createviewGOOD_SC
2>as
3>selectsno,o,grade
4>fromsc,C_G
5>wheregrade>Gavg;
语句已处理。
SQLWKS>select*fromC_G;
CNOGAVG
--------------
0181.3333333
0279.6666667
0388
0485.5
已选择4行。
selectdistinct*fromGOOD_SC;
SNOCNOGRADE
-------------------
0010185
0020489
0040293
0050381
0070482
0080184
0090395
0100283
已选择8行。
3、通过视图对表进行操作
(1)在信息系学生的视图中找出年龄小于20岁的学生;
SQLWKS>selectsage
2>fromIS_pc
3>wheresage<20;
SAGE
----------
19
已选择1行。
(2)查询信息系选修了1号课程且成绩在90分以上的学生;
SQLWKS>selectgrade
2>fromIS_S1
3>wheregrade>=90;
GRADE
----------
已选择0行。
(3)在S_G视图中查询平均成绩在90分以上的学生学号和平均成绩;
SQLWKS>selectGavg
2>fromS_G
3>wheregavg>=90
GAVG
----------
93
95
已选择2行。
(4)创建CS-KC视图,包括计算机专业各学生的学号、其选修的课程号及成绩,要保证对该视图的修改都要符合专业名为“计算机”这个条件;
SQLWKS>createviewCS1_KC
2>as
3>selects.sno,o,grade
4>fromsc,s
5>wheresdept='pc'
6>ands.sno=sc.sno
7>groupbys.sno,o,grade
8>withcheckoption;
语句已处理。
SQLWKS>selectdistinct*fromCS1_KC;
SNOCNOGRADE
-------------------
0040293
0070482
0100283
已选择3行。
(7)(5)查找计算机专业的学生学号和选修的课程号;
SQLWKS>selectsc.sno,cno
2>fromsc,IS_pc
3>wheresdept='pc'
4>andsc.sno=IS_pc.sno;
SNOCNO
---------
00402
00704
01002
已选择3行。
(8)(6)向S-G视图中插入一元组。
insertintoS_Gvalues('011','90');
4、游标的操作:
结果如图所示:
(1)用简单循环控制从EMP表中取出某一部门的员工姓名和工资,存入TEMP表中;
结果如图所示:
(2)采用FOR循环重做上题;
结果如图所示:
(3)游标的FOR循环内使用查询
结果如图所示:
(4)查询EMP表某部门的雇员情况,如果某雇员的工资小于800,掌握将其工资设为800;
结果如图所示:
(5)为职工涨10%的工资。
从最低工资开始涨,最后工资总额限制在50万元以内;
结果如图所示:
(6)根据DEPT表中返回的部门号,从EMP表中查询该部门的雇员情况,使用带参数的游标;
(8)(7)统计EMP表中工资大于3000的记录数,而且给工资增长10%。
结果如图所示:
四、过程分析和建议
在本次实验中,我熟悉了视图和游标的操作,从课堂到实验,我更加深刻理解了视图和游标的操作,将老师在课堂上的内容应用于实践,让自己的能力得到了提升。
在这次试验我发现:
1.在游标的操作中,游标的赋值宏定义只能在SQL/PULS环境下才能识别。
2.在向S-G视图中插入元组时,由于创建视图时加上了语句withcheckoption,权限为不能通过视图对表进行插入,以免修改视图是对表造成误操作。