文档详情

数据库原理及应用(何玉洁)第二版第5章.ppt

发布:2025-04-03约2.24千字共10页下载文档
文本预览下载声明

第5章视图视图是由从数据库的基本表中选取出来的01数据组成的逻辑窗口,是基本表的部分行和列02数据的组合。视图是一个虚表。在数据库中只03存放视图的定义,不存放视图包含的数据,这04些数据仍存放在原来的基本表中。05视图可以建立在基本表上,也可以建立在06其他的视图上,即可以在一个视图之上再定义07视图。但对视图数据的操作最终都会转换为对08基本表的操作。095.1视图概念5.2定义视图定义视图的一般格式为:CREATEVIEW视图名[(视图列名表)] AS查询语句注意以下几点:子查询中通常不包含ORDERBY和DISTINCT子句。在定义视图时要么指定全部视图列,要么全部省略不写。如果省略了视图的属性列名,则视图的列名与子查询列名相同。但在如下三种情况下必须明确指定组成视图的所有列名:某个目标列是计算函数或列表达式;多表连接时选出了几个同名列作为视图的字段需要在视图中为某个列选用新的更合适的列名1、定义单源表视图单源表视图指的是数据取自一个基本表的部分行、列。这样定义的视图可以进行查询和修改数据操作。例.建立信息系学生的视图。 CREATEVIEWIS_Student AS SELECTSno,Sname,Sage FROMStudentWHERESdept=信息系DBMS执行CREATEVIEW语句的结果只是保存视图的定义,只有在对视图执行查询时,才按视图的定义从相应基本表中查询数据。2、定义多源表视图多源表视图指的是定义视图的查询的源表可以有多个,这样定义的视图一般只用于查询,不用于修改数据。例.建立信息系选修了‘c01’号课程的学生的视图。CREATEVIEWV_IS_S1(Sno,Sname,Grade)AS SELECTStudent.Sno,Sname,SageFROMStudentJOINSCONStudent.Sno=SC.SnoWHERESdept=信息系ANDSC.Cno=c01在已有视图上定义新视图在视图上建立视图表示视图的数据源中有视图。作为数据源的视图必须是已经建立好的。例.建立信息系选修了‘c01’号课程且成绩在90分以上的学生的视图。CREATEVIEWV_IS_S2ASSELECTSno,Sname,GradeFROMV_IS_S1WHEREGrade=90定义带表达式的视图4、定义带表达式的视图在定义基本表时,为减少数据库中的冗余数据,表中只存放基本数据,由基本数据经过各种计算派生出的数据一般是不存储的。但由于视图中的数据并不实际存储,所以定义视图时可以根据需要设置一些派生属性列,在这些派生属性列中保存经过计算的值。例.定义一个反映学生出生年份的视图。 CREATEVIEWBT_S(Sno,Sname,Sbirth) ASSELECTSno,Sname,2002-SageFROMStudent5、含分组统计信息的视图含分组统计信息的视图是指视图的子查询中含有GROUPBY子句,这样的视图只能用于查询,不能用于修改数据。例.定义一个存放每个学生的学号及平均成绩的视图。 CREATEVIEWS_G(Sno,AverageGrade)ASSELECTSno,AVG(Grade)FROMSC GROUPBYSno注意:如果查询的选择列表包含表达式或统计函数,而且在查询中也没有为这样的列指定列标题,则在定义视图的语句中必须要指定视图属性列的名字。例.利用5.2节建立的视图,查询信息系年龄小于20岁的学生。SELECTSno,Sname,SageFROMIS_StudentWHERESage205.3通过视图查询数据数据库管理系统在对视图进行查询时,首先检查要查询的视图是否存在,如果存在,则从数据字典中提取视图的定义,把视图的定义语句与对视图的查询语句结合起来,转换成等价的对基本表的查询,然后执行转换后的查询。例.上例查询最终转换成的实际查询为:SELECTSno,Sname,SageFROMStudent

显示全部
相似文档