- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
3.5 视图 视图 用户看待数据的多种角度性可借用视图来实现,从而可以隐藏部分信息 视图是从一个或几个基本表或视图导出的表。数据库中只存放视图定义,不存放相应数据,数据仍存放在原表中, 因此视图又被称为虚表。 视图经定义后,即可和表一样使用 视图操作 定义视图、查询视图、删除视图 更新视图(有一定限制,并非所有视图都可更新) 3.5.1 定义视图 子查询中通常不含ORDER BY和DISTINCT短语 WITH CHECK OPTION表示对视图进行更新操作的行须满足子查询中的条件表达式 组成视图的属性列名或者全部指定或者全部省略,但下列三种情况时必须指定列名 目标列是集函数或列表达式、多表连接时出现的同名列、启用新列名 属性列名可以是虚拟列(基表中没有的列),其值由表达式计算得到 例子 从多个基表导出的视图 带表达式的视图 从其它视图中导出视图 说明 CREATE VIEW语句的执行结果 DBMS执行CREATE VIEW语句的结果只是把视图的定义存入数据字典,并不执行其中的SELECT语句。 只有在对视图进行查询时,才执行视图定义中的SELECT语句并从基表中将数据取出。 删除视图 基表(或视图)被删除后,建立在其基础上的视图也需显式地一一删除 3.5.2 查询视图 视图消解过程:首先进行视图有效性检查,检查查询的表、视图等是否存在。如果存在,则结合视图定义中的子查询和用户查询,将视图查询转换成为对基表的查询并执行。 例子 3.5.3更新视图 通过视图来插入、删除和修改数据 由于有些视图的更新不能唯一地有意义地转换成相应基表的更新,因此目前关系数据库系统一般只允许对行列子集视图进行更新 例子 例子 系统对视图更新操作的一些规定 不同的数据库产品各不相同 如IBM DB2规定: 若视图是由两个以上基表导出的,则此视图不允许更新。 若视图的字段来自表达式或常数,则不允许对此视图进行插入和更新操作,但允许删除操作。 若视图的字段来自集函数,则此视图不允许更新 若视图定义中含有GROUP BY子句或DISTINCT子句,则此视图不允许更新 若视图定义中有嵌套查询,且内层查询的FROM子句中涉及的表也是导出该视图的基表,则此视图不允许更新 一个不允许更新的视图上定义的视图也不允许更新 视图的作用 简化用户操作 数据看起来简单、清晰。 用户可以从多角度看待同一数据 灵活共享数据库。 对数据库重构提供了一定程度的逻辑独立性 当数据库重构造(如增加表,或增加字段)时,用户和用户程序不会受影响。只是由于视图的更新是有条件的,因此视图只能在一定程度上提供数据的逻辑独立性。 能够对机密数据提供安全保护 对不同的用户定义不同的视图,实现重要数据的隐藏。 练习 职工-工资数据库 职工(工号,姓名,职务,部门) 工资表(工号,月份,基本工资,岗位津贴,交通补贴) 建立职工工号和每月基本工资的视图 建立每个职工的姓名和他当月总收入的视图 建立本月总收入低于1000元的职工的视图 * * CREATE VIEW 视图名 [(列名[,列名]…)] AS 子查询 [WITH CHECK OPTION]; CREATE VIEW IS_Student AS SELECT Sno, Sname, Sage FROM Student WHERE Sdept = ‘IS’; CREATE VIEW IS_Student AS SELECT Sno, Sname, Sage FROM Student WHERE Sdept = ‘IS’ WITH CHECK OPTION; 例 建立信息系学生的视图 省略对目标列名的指定 WITH CHECK OPTION表示对视图进行更新操作时,DBMS会自动加上条件Sdept = ‘IS’ 以上为行列子集视图:从单个基表导出的,只是去掉了某些行和列,但保留了码的视图 ★ CREATE VIEW IS_S1(Sno, Sname, Grade) AS SELECT Student.Sno, Sname, Grade FROM Student, SC WHERE Sdept = ‘IS’ AND Student.Sno = SC.Sno AND SC.Cno = ‘1’; 例 建立信息系选修了1号课程的学生的视图 具体指定 目标列名 非行列子集视图 CREATE VIEW BT_S(Sno, Sname, Sbirth) AS SELECT Sno, Sname, 2002-Sage FROM Student; CREATE VIEW S_G(Sno, Gavg) AS SELECT Sno, AVG(Grade) FROM SC G
文档评论(0)