- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
视图 视图是虚表,其数据不存储,其记录来自对应的基本表,只在数据库中(数据字典)存储其定义。 视图在概念上与基本表等同,用户可以在视图上再定义视图,也可以对视图进行查询.删除.更新等操作。 定义视图使用语句CREATE VIEW,其语法格式为: CREATE VIEW 视图名[(视图列表)] AS 子查询 其中,视图列表为可选项,省略时,视图的列名由子查询的结果决定。 以下两种情况下,视图列名不可省略: 1.视图由多个表连接得到,在不同的表中存在同名的列,则需指定列名; 2.当视图的列名为表达式或库函数的计算结果时,而不是单纯的属性名时,则需指明列名。 3.5.1.2 删除视图 视图定义后可随时删除,删除视图的语法格式为: DROP VIEW 视图名 例3.74 删除计算机系教师情况的视图SUB_T。 DROP VIEW SUB_T 删除视图: 只是删除该视图在数据字典中的定义,而与该视图有关的基本表中的数据不会受任何影响; 由此视图导出的其他视图的定义不会删除,但已无任何意义。用户应该把这些视图也删除。 3.5.2 查询视图 视图定义后,对视图的查询操作如同对基本表的查询操作一样。 例3.75 查找视图SUB_T中职称为教授的教师号和姓名。 SELECT TNO,TN FROM SUB_T WHERE PROF=教授 此查询的执行过程: 系统首先从数据字典中找到SUB_T的定义, 然后把此定义和用户的查询结合起来,转换成等价的对基本表T的查询, 这一转换过程称为视图消解(View Resolution),相当于执行以下查询: SELECT TNO,TN FROM T WHERE DEPT =’计算机’ AND PROF=’教授’ 由上例可以看出:当对一个基本表进行复杂的查询时 可以先对基本表建立一个视图; 然后只需对此视图进行相应的查询。 这样就不必再键入复杂的查询语句,而将一个复杂的查询转换成一个简单的查询,从而简化了查询操作。 3.5.3 更新视图 由于视图是一张虚表,所以对视图的更新,最终实际上是转换成对基本表的更新。 其更新操作包括插入、修改和删除数据, 其语法格式如同对基本表的更新操作一样。 有些更新在理论上是不可能的,有些实现起来比较困难。 定义3.1 如果视图是从单个基本表只使用选择、投影操作导出的,并且包含了基本表的主键,这样的视图称为“行列子集视图”,并且可以被执行更新操作。 对视图的更新操作(1) 例3.29 下面讨论对视图更新的几个例子。①设有一个视图定义CREATE VIEW SUDENT_GRADEAS SELECT S.S#, SNAME,CNAME,GRADEFROM S,SC,CWHERE S.S# = SC.S# AND SC.C# =C.C#;这个视图定义了学生选修的课程名和成绩,是由三个基本表联接而成的。 如果用户要在视图中执行插入操作:INSERT INTO STUDENT_GRADEVALUES (S24, WANG, MATHS,80);若在基本表C中,课程名为MATHS的课程号有多个,则往基本表SC插入元组时,课程号C#就不定了。因此,对这个视图的更新是不允许的。 对视图的更新操作(2) ②设有一个视图定义,包含每个学生选修课程(成绩为非空)的门数和平均成绩:CREATE VIEW S_GRADE(S#,C_NUM,AVG_GRADE)AS SELECT S#,COUNT(C#),AVG(GRADE)FROM SCWHERE GRADE IS NOT NULL 视图S_GRADE虽然是从单个基本表导出,但导出时使用了分组和聚集操作,因此也是不能更新的。 譬如,在未更改基本表SC中值时,要在视图S_GRADE中更改学生的平均成绩,显然是不切实际的。 对视图的更新操作(3) ③如果定义了一个有关男学生的视图:CREATE VIEW S_MALEAS SELECT S#,SNAME,AGEFROM SWHERE SEX =M;这个视图是从单个关系只使用选择和投影导出的,并且包含键S#,因此是可更新的。 譬如,执行插入操作:INSERT INTO S_MALEVALUES(S28,WU,18);系统自动会把它转变成下列语句:INSERT INTO SVALUES(S28, WU,18, M); ?: 怎样的视图才可更新 一般的: 在关系数据库中,并不是所有的视图都是可更新的,因为有些视图的更新不能唯一地有意义地转换成对相应基本表的更新。 一般地(如DB2规定): 1. 若视图是由两个以上基本表导出的,则此视图不允许更新。 2. 若视图的字段来自字段表达式或常数,则不允许对此视图执行INSERT和UPDATE操作,但
文档评论(0)