资源描述
系统中视图的应用任务任务1 1:选择:选择employeeemployee表中的雇员表中的雇员IDID、姓名、性、姓名、性别、和出生日期四个字段,以及别、和出生日期四个字段,以及productproduct表中的产表中的产品品IDID、产品名和类别、产品名和类别IDID三个字段创建名为三个字段创建名为v_employeev_employee的视图(要求用企业管理器)的视图(要求用企业管理器)任务任务2 2:利用:利用employeeemployee表中的全部字段和记录创表中的全部字段和记录创建名为建名为view1_employeeview1_employee的视图(要求用的视图(要求用SQLSQL语句语句实现)实现)任务任务3 3:选择:选择employeeemployee表中的雇员表中的雇员IDID、姓名、性、姓名、性别、出生年月和雇佣日期字段,以及所有女职工别、出生年月和雇佣日期字段,以及所有女职工的记录创建名的记录创建名view2_employeeview2_employee的视图(要求用的视图(要求用SQLSQL语句实现)语句实现)知识点:视图是一种数据库的对象,是从一个或多个数据视图是一种数据库的对象,是从一个或多个数据表(基本表)或视图导出的虚表,是关系数据库表(基本表)或视图导出的虚表,是关系数据库系统提供给用户以多种角度观察数据中数据的重系统提供给用户以多种角度观察数据中数据的重要机制。要机制。虚表是指视图只存储了它的定义虚表是指视图只存储了它的定义(select(select语句语句),而,而没有储存视图对应的数据,这些数据仍存放在原没有储存视图对应的数据,这些数据仍存放在原来的数据表中,对视图的数据操作与对表的操作来的数据表中,对视图的数据操作与对表的操作一样,可以对其进行改变,若基表的数据发生变一样,可以对其进行改变,若基表的数据发生变化,这种变化也会自动反映到视图中。化,这种变化也会自动反映到视图中。视图可以是一个表的部分,也可以是多个表的联视图可以是一个表的部分,也可以是多个表的联合。合。l 定义视图定义视图l 查询视图查询视图l 更新视图更新视图l 视图的作用视图的作用snosnosnamesnamesagesagesdeptsdeptstudentsnosnoscoscogradegradescol 定义视图建立视图删除视图一、建立视图语句格式语句格式 CREATE VIEWCREATE VIEW (,)AS AS WITH CHECK OPTIONWITH CHECK OPTION;组成视图的属性列名:全部省略或全部指定组成视图的属性列名:全部省略或全部指定子查询不允许含有子查询不允许含有ORDER BYORDER BY子句和子句和DISTINCTDISTINCT短语短语 建立视图(续)RDBMS执行CREATE VIEW语句时只是把视图定义存入数据字典,并不执行其中的SELECT语句。在对视图查询时,按视图的定义从基本表中将数据查出。建立视图(续)例1 建立信息系学生的视图。CREATE VIEW IS_StudentCREATE VIEW IS_Student AS AS SELECT Sno SELECT Sno,SnameSname,SageSage FROM Student FROM Student WHERE Sdept=IS WHERE Sdept=IS;建立视图(续)例例22建立信息系学生的视图,并要求进行修改和插入操建立信息系学生的视图,并要求进行修改和插入操作时仍需保证该视图只有信息系的学生作时仍需保证该视图只有信息系的学生 。CREATE VIEW IS_StudentCREATE VIEW IS_Student AS AS SELECT Sno SELECT Sno,SnameSname,SageSage FROM Student FROM Student WHERE Sdept=IS WHERE Sdept=IS WITH CHECK OPTIONWITH CHECK OPTION;with check option可以这么解释:通过视图进行的修改,必须也能通过该视图通过视图进行的修改,必须也能通过该视图看到修改后的结果。看到修改后的结果。比如你insert,那么加的这条记录在刷新视图后必须可以看到;如果修改,修改完的结果也必须能通过该视图看到;如果删除,当然只能删除视图里有显示的记录。我们来看下面的例子:create or replace view testviewasselect empno,ename from emp where ename like M%with check option;这里我们创建了一个视图,并使用了with check option来限制了视图。然后我们来看一下视图包含的结果:select*from testview得到:EMPNO ENAME-7654 MARTIN7934 MILLER这两条记录 然后我们在试图将其中一条更新:update testviewset ename=Mikewhere empno=7654;OK,这条更新语句可以执行,并没有什么问题,但是当我们执行另一条更新时:update testviewset ename=Robinwhere empno=7654;就会出现ORA-01402:视图 WITH CHECK OPTIDN 违反 where 子句的错误。建立视图(续)对对IS_StudentIS_Student视图的更新操作:视图的更新操作:修改操作:自动加上修改操作:自动加上Sdept=ISSdept=IS的条件的条件删除操作:自动加上删除操作:自动加上Sdept=ISSdept=IS的条件的条件插入操作:自动检查插入操作:自动检查SdeptSdept属性值是否为属性值是否为IS IS 如果不是,则拒绝该插入操作如果不是,则拒绝该插入操作如果没有提供如果没有提供SdeptSdept属性值,则自动定义属性值,则自动定义SdeptSdept为为ISIS建立视图(续)基于多个基表的视图 例例3 3 建立信息系选修了建立信息系选修了1 1号课程的学生视图。号课程的学生视图。CREATE VIEW IS_S1(SnoCREATE VIEW IS_S1(Sno,SnameSname,Grade)Grade)AS AS SELECT Student.Sno SELECT Student.Sno,SnameSname,GradeGrade FROM Student FROM Student,SCSC WHERE Sdept=IS AND WHERE Sdept=IS AND Student.Sno=SC.Sno AND Student.Sno=SC.Sno AND SC.Cno=1 SC.Cno=1;建立视图(续)基于视图的视图基于视图的视图 例例4 4 建立信息系选修了建立信息系选修了1 1号课程且成绩在号课程且成绩在9090分以上的学分以上的学生的视图。生的视图。CREATE VIEW IS_S2CREATE VIEW IS_S2 AS AS SELECT Sno SELECT Sno,SnameSname,GradeGrade FROM IS_S1 FROM IS_S1 WHERE Grade=90 WHERE Grade=90;建立视图(续)分组视图 例例6 6 将学生的学号及他的平均成绩定义为一个视将学生的学号及他的平均成绩定义为一个视图图 假设假设SCSC表中表中“成绩成绩”列列GradeGrade为数字型为数字型 CREAT VIEW S_G(SnoCREAT VIEW S_G(Sno,GavgGavg)AS AS SELECT Sno SELECT Sno,AVG(Grade)AVG(Grade)FROM SC FROM SC GROUP BY Sno GROUP BY Sno;建立视图(续)不指定属性列 例例7 7 将将StudentStudent表中所有女生记录定义为一个视图表中所有女生记录定义为一个视图 CREATE VIEW F_Student(F_SnoCREATE VIEW F_Student(F_Sno,namename,sexsex,ageage,dept)dept)AS AS SELECT*SELECT*FROM Student FROM Student WHERE Ssex=WHERE Ssex=女女;缺点:缺点:修改基表修改基表StudentStudent的结构后,的结构后,StudentStudent表与表与F_StudentF_Student视图的映象关系被视图的映象关系被破坏,导致该视图不能正确工作。破坏,导致该视图不能正确工作。二、删除视图语句的格式:DROP VIEW ;该语句从数据字典中删除指定的视图定义该语句从数据字典中删除指定的视图定义如果该视图上还导出了其他视图,使用如果该视图上还导出了其他视图,使用CASCADECASCADE级联删除语句,把该视图和由它导出级联删除语句,把该视图和由它导出的所有视图一起删除的所有视图一起删除 删除基表时,由该基表导出的所有视图定义都删除基表时,由该基表导出的所有视图定义都必须显式地使用必须显式地使用DROP VIEWDROP VIEW语句删除语句删除 删除视图(续)例8 删除视图BT_S:DROP VIEW BT_S;删除视图IS_S1:DROP VIEW IS_S1;级联删除:DROP VIEW IS_S1 CASCADE;l 查询视图用户角度:查询视图与查询基本表相同用户角度:查询视图与查询基本表相同RDBMSRDBMS实现视图查询的方法实现视图查询的方法 视图消解法(视图消解法(View ResolutionView Resolution)进行有效性检查进行有效性检查 转换成等价的对基本表的查询转换成等价的对基本表的查询 执行执行修正修正后的查询后的查询l 查询视图(续)例9 在信息系学生的视图中找出年龄小于20岁的学生。SELECT SnoSELECT Sno,SageSage FROM IS_Student FROM IS_Student WHERE Sage20 WHERE Sage20;IS_StudentIS_Student视图的定义视图的定义 (参见视图定义例参见视图定义例1)1)查询视图(续)视图消解转换后的查询语句为:SELECT SnoSELECT Sno,Sage Sage FROM Student FROM Student WHERE WHERE Sdept=ISSdept=IS AND Sage20 AND Sage=90WHERE Gavg=90;S_GS_G视图的子查询定义:视图的子查询定义:CREATE VIEW S_G(SnoCREATE VIEW S_G(Sno,Gavg)Gavg)AS AS SELECT SnoSELECT Sno,AVG(Grade)AVG(Grade)FROM SCFROM SCGROUP BY SnoGROUP BY Sno;查询转换错误:错误:SELECT SnoSELECT Sno,AVG(Grade)AVG(Grade)FROM SCFROM SCWHERE WHERE AVG(Grade)=90AVG(Grade)=90GROUP BY SnoGROUP BY Sno;正确:正确:SELECT SnoSELECT Sno,AVG(Grade)AVG(Grade)FROM SCFROM SCGROUP BY SnoGROUP BY SnoHAVING AVG(Grade)=90HAVING AVG(Grade)=90;l 更新视图(续)例例12 12 将信息系学生视图将信息系学生视图IS_StudentIS_Student中学号中学号200215122200215122的学生姓名改为的学生姓名改为“刘辰刘辰”。UPDATE UPDATE IS_StudentIS_StudentSET Sname=SET Sname=刘辰刘辰 WHERE Sno=200215122 WHERE Sno=200215122;转换后的语句:转换后的语句:UPDATE UPDATE StudentStudentSET Sname=SET Sname=刘辰刘辰 WHERE Sno=200215122 AND WHERE Sno=200215122 AND Sdept=ISSdept=IS;l 更新视图(续)例例13 13 向信息系学生视图向信息系学生视图IS_SIS_S中插入一个新的学生中插入一个新的学生记录:记录:200215129200215129,赵新,赵新,2020岁岁INSERTINSERTINTO INTO IS_StudentIS_StudentVALUES(VALUES(9502995029,赵新赵新,20)20);转换为对基本表的更新:转换为对基本表的更新:INSERTINSERTINTO INTO StudentStudent(Sno(Sno,SnameSname,SageSage,SdeptSdept)VALUES(VALUES(200215129 200215129,赵新赵新,2020,ISIS);更新视图(续)例例1414删除信息系学生视图删除信息系学生视图IS_StudentIS_Student中学号为中学号为200215129200215129的记录的记录 DELETEDELETEFROM FROM IS_StudentIS_StudentWHERE Sno=200215129 WHERE Sno=200215129;转换为对基本表的更新:转换为对基本表的更新:DELETEDELETEFROM FROM StudentStudentWHERE Sno=200215129 AND WHERE Sno=200215129 AND Sdept=ISSdept=IS;更新视图(续)更新视图的限制:一些视图是不可更新的,因为更新视图的限制:一些视图是不可更新的,因为对这些视图的更新不能唯一地有意义地转换成对对这些视图的更新不能唯一地有意义地转换成对相应基本表的更新相应基本表的更新例:视图例:视图S_GS_G为不可更新视图。为不可更新视图。UPDATE S_GUPDATE S_GSET SET Gavg=90Gavg=90WHERE Sno=WHERE Sno=200215121200215121;这个对视图的更新无法转换成对基本表这个对视图的更新无法转换成对基本表SCSC的更新的更新更新视图(续)允许对行列子集视图进行更新对其他类型视图的更新不同系统有不同限制l 视图的作用1.视图能够简化用户的操作2.视图使用户能以多种角度看待同一数据 3.视图对重构数据库提供了一定程度的逻辑独立性 4.视图能够对机密数据提供安全保护5.适当的利用视图可以更清晰的表达查询插入数据记录 例:利用已创建的视图例:利用已创建的视图view1_employeeview1_employee,向,向employeeemployee表中添加一条新的数据记录,该记录对表中添加一条新的数据记录,该记录对应的值为应的值为 :(1000,:(1000,李立李立,男男,1980-9-1980-9-9 9,2003-3-92003-3-9,乒乓球乒乓球,2000),2000)。更改数据记录例:利用已创建的视图例:利用已创建的视图view1_employee,view1_employee,修改修改employeeemployee表中姓名为表中姓名为“章宏明章宏明”的为的为“张宏明张宏明”。修改数据记录例:利用视图例:利用视图view1_employeeview1_employee删除表删除表employeeemployee中中的姓名为李立三的记录。的姓名为李立三的记录。系统中索引的应用任务任务1 1:为:为employeeemployee表创建一个姓名的非聚集索表创建一个姓名的非聚集索引,取名为引,取名为i_xm_employeei_xm_employee(要求使用企业管理(要求使用企业管理器)器)任务任务2 2:为:为employeeemployee表创建一个姓名和出生日期表创建一个姓名和出生日期的复合索引,取名为的复合索引,取名为i_xmrq_employee(i_xmrq_employee(要求用要求用SQLSQL语句创建语句创建)任务任务3 3:为:为employeeemployee表创建一个雇员表创建一个雇员IDID的唯一聚的唯一聚集索引,取名为集索引,取名为i_gy_employee(i_gy_employee(要求用要求用SQLSQL语句语句创建创建)
展开阅读全文