精通Oracle核心技术和项目实战之视.pptx_第1页
精通Oracle核心技术和项目实战之视.pptx_第2页
精通Oracle核心技术和项目实战之视.pptx_第3页
精通Oracle核心技术和项目实战之视.pptx_第4页
精通Oracle核心技术和项目实战之视.pptx_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第11章 视图 视图是Oracle提供的一种查询机制。该机制 不仅可以简化各种查询,还可以保护数据 库信息的安全。视图在数据库中可以理解 为一张虚拟的表,使用视图可以补充表结 构在某些需求方面的不足,可以让开发人 员更方便地查询复杂数据。本章将主要介 绍视图的概念、作用以及如何创建、查 询、管理视图。 11.1 Oracle视图 初学者听到视图会比较陌生,实际上视图 的创建和操作比较简单。在直观印象中它 和表相似,但是它不具备表的某些功能。 视图的使用和管理在许多方面和表相似, 通俗来说我们一般把视图看作没有数据的 表,本节就将介绍视图的概念和作用。 11.1.1 视图的概念 视图是由select查询语句定义的、基于一个或多个表(或视 图)的一个逻辑表。视图本身不包含任何数据,也就是说 视图只是一个查询语句的结果。它的数据最终是表中获取 的,这些表我们可以称为基表,所以不需要在表空间中为 视图分配存储空间。理解如图所示。 11.1.2 视图的作用 有读者可能会产生疑问,既然视图和表相 似,为什么还要学习它,其实除了select语 句之外,视图在insert、update和delete语句 方面受限制,视图的作用如下: (1)使数据简化。 (2)使数据更加独立。 (3)增加安全性。 11.1.3 视图的分类 在Oracle数据库中,视图可以被分成这样几种类型 ,关系视图、内嵌视图、对象视图和物理化视图。 在本书中,将学习关系视图和内嵌视图。 关系视图就是一个续表,它可以定义对数据的查询 ,允许其他查询重复使用该对象。关系视图属于简 单视图,在数据库字典中可以查看它的信息。 内嵌视图则是子查询的一种,它适合不重用的对数 据的查询,其他查询无法使用该视图,这种视图不 需要create命令完成,所以在数据库字典中无法查看 该视图的信息。 11.2 关系视图创建和使用 可以直接使用SQL语句创建一个视图,也 可以使用工具SQL Developer、OEM来创建 视图。在创建视图时,只是将视图的定义 信息保存到数据字典中,在视图中并不保 存任何数据,通过视图而操作的数据仍然 保存在表中,所以不需要在表空间中为视 图分配存储空间。 11.2.1 使用语句创建视图 视图的创建比较简单,有一定的语法结构 ,其语法结构如图所示。 11.2.1 使用语句创建视图 在创建视图之前,为了确保视图的正确性,应 先测试select子查询的语句,所以创建视图的 正确步骤是: (1)编写select子查询语句。 (2)测试select子查询语句。 (3)检查查询结果的正确性。 (4)使用该select子查询语句创建视图。 创建视图时,可以创建单表视图,也可以创建 多表视图以及视图的视图、无源表视图。下面 将具体讲解。 11.2.1 使用语句创建视图 1.创建单表视图 单表视图表示创建视图时,是根据一个表来创 建。 在创建视图之前先列出表的信息,方便和视图 作对比。 【示例11-1】创建视图,这个视图的作用是显 示city是Lansing的顾客customer_id、 cust_first_name、cust_last_name、city、 phone_number。 【示例11-2】现在我们来查询这个视图,查询 视图的语法和查询表一样。 11.2.1 使用语句创建视图 2.创建多表视图 在通常情况下,视图不会只根据一个表来 创建,它会有两个或多个源表。下面我们 来介绍基于两个表的视图,创建多表视图 的语法如图所示。 11.2.1 使用语句创建视图 【示例11-3】创建一个基于两个表的视图 ,把orders表和customersnew表关联起来查 询,查询其中order_id,、order_date、 customer_id,、cust_first_name等信息。 【示例11-4】现在我们来查询这个视图, 查询视图的语法和查询表一样。 11.2.1 使用语句创建视图 3.创建视图的视图 视图不仅可以建立在单表或多表上,也可 以用其他的视图作为源表创建新的视图。 现在我们简单演示一下在视图的基础上创 建一个视图,语法如图所示。 11.2.1 使用语句创建视图 【示例11-5】创建一个前面示例11-1的一个 子视图,其实就是去掉cust_last_name这 列。 【示例11-6】现在我们来查询这个视图, 查询视图的语法和查询表一样。 11.2.1 使用语句创建视图 4.创建无源表视图 在Oracle数据库中,我们可以在没有源表时,创建视图。 但是这种情况下,视图虽然是创建了,但是还不能使用。 等到它的源表创建完成之后,就可以正常使用了。这种创 建视图的方式成为强制创建视图。可以使用force选项来强 制创建视图。其语法结构如图所示。 11.2.1 使用语句创建视图 【示例11-7】强制创建视图vw_table,假设 该视图的源表名称为tableview。 【示例11-8】现在我们来查询这个视图, 查询视图的语法和查询表一样。 11.2.1 使用语句创建视图 5.设置视图只读(read only) 通常简单的视图是允许进行DML操作的,但是这样容易出 现逻辑问题,因为视图增加或更新数据实际上是在操作视 图的源表。所以在创建视图时为了避免用户修改数据,可 以把视图设成为只读属性,其操作比较简单,语法如图所 示。 11.2.1 使用语句创建视图 【示例11-9】创建视图,这个视图的作用 是显示city是Lansing的顾客customer_id、 cust_first_name、cust_last_name、city、 phone_number,并且要覆盖前面原有的视 图,设置此视图为只读属性效果。 【示例11-10】对只读视图vw_cus进行查 询、增加数据、插入等DML操作进行测 试。 11.2.1 使用语句创建视图 6. 设置视图约束(check option) check option 选项表示视图启动了和子查询条件一样的约 束。也就是说,如果对视图修改或插入的数据和查询条件 不一致,那么该操作会被终止。关于检查约束前面已经讲 过,同样可以为视图设置检查约束,语法如图所示。 11.2.1 使用语句创建视图 【示例11-11】创建视图,这个视图的作用 是显示city是Lansing的顾客customer_id、 cust_first_name、cust_last_name、city、 phone_number,并且为此视图设置检查约 束。 【示例11-12】通过Oracle中的数据字典 user_constraints,查询使用with check option 所创建的约束。 11.2.2 使用SQL Developer创建视 图 对于记不住视图语法者,使用SQL Developer工具创建视图方便简洁,下面我 们就为大家演示一下如何使用该工具来创 建视图。 【示例11-13】使用SQL Developer工具创建 一个基于两个表的视图,把orders表和 employees表关联起来查询,查询其中 order_id、order_date、sales_rep_id、 first_name。 11.2.3 使用OEM创建视图 除了上述两种方法外,在OEM中,可以通 过界面交互的方式创建视图。 【示例11-14】结合数据表customersnew, 创建视图,这个视图的作用是显示city是 Lansing的顾客customer_id、cust_first_name 信息。 11.2.4 查看及操作访问视图 视图创建之后,可以查看视图,也可以使用操 作访问视图。 1.查看视图定义 视图创建之后,其定义存在于数据库中。可以 通过SQL Developer的Views窗口来查看视图 VW_E在数据库中的信息。 【示例11-15】查看示例11-11创建的视图 vw_cus。 【示例11-16】通过数据字典user_view查询当 前用户拥有的所有视图信息。以查看vw_cus为 例。 11.2.4 查看及操作访问视图 2.查看关系视图功能 我们知道视图创建之后,可以查询视图中的数 据。除此之外,我们也可以像表一样完成数据 操纵的功能。即利用视图,可以插入数据和更 新数据,也可以删除其中数据。对视图的操作 仅限于更新、插入、删除。 【示例11-17】Oracle内置视图 user_updatable_columns定义了用户视图中各列 的可更新情况。 11.2.4 查看及操作访问视图 3.操作访问视图 对视图进行插入、更新操作。需要注意的 是。 只读视图仅可以进行查询操作,而无法进 行更新及插入数据的操作。 对于创建了约束的视图,使用视图时会检 查涉及的数据是否能通过select子查询的 where条件,否则SQL语句本能成功执行。 11.2.4 查看及操作访问视图 (1)更新视图数据 更新视图数据,实际是更新基础表中的数据。我们可以 利用update语句来更新视图中的数据,但是视图本身并 不存储数据。更新视图中的数据时,需要满足对应基表 的相关约束。 【示例11-18】在视图vw_cus,该视图设置了with check option选项,要求city是Lansing,现欲将customer_id为 982员工姓名调整为“Alva”,可以更新视图。 【示例11-19】通过更新视图vw_cus,将customer_id为 136员工姓名调整为“Alva”。 【示例11-20】查询基础表customersnew中的数据进行验 证。 11.2.4 查看及操作访问视图 (2)向视图插入数据 利用insert语句,向视图中插入数据。使用视 图进行插入时,插入的数据也同样需要满足基 表和视图的相关约束。 【示例11-21】在视图vw_cus中,插入新员工 983的相关信息,但是没有为city赋值,所以会 遇到错误。 【示例11-22】在视图vw_cus中,重新尝试插 入新顾客983的相关信息,此次为city赋值。 【示例11-23】在向视图vw_cus中插入数据之 后,重新查询视图中的数据。 11.2.4 查看及操作访问视图 (3)用视图进行删除。 【示例11-24】利用视图vw_cus,删除编号 为983的顾客相关信息。 【示例11-25】视图vw_cus删除数据之后, 重新查询视图中的数据。 11.2.5 使用SQL Developer工具访 问视图 使用SQL Developer对视图数据操作也很直观、简单, 相对而言使用起来容易上手。在本小节为大家演示一下 在SQL Developer下对视图数据的更新、插入、删除 等。 1.更新数据 【示例11-26】使用SQL Developer工具在将视图w_cus中 ,把视图中顾客编号为316的city改为北京。 【示例11-27】使用SQL Developer工具在将视图w_cus中 ,把视图中顾客编号为316的cust_first_name改为Sissy。 【示例11-28】我们之前创建了视图w_orders_cus,该视 图的源表是orders、customersnew,使用该视图更新数据 ,将顾客编号为316的cust_first_name改为Angel。 11.2.5 使用SQL Developer工具访 问视图 2.视图数据的插入 有时候我们也可以为视图增加数据,为了操作 简单,就以SQL Developer工具为例为大家简 单演示一下视图添加数据的操作。和前面讲的 修改数据一样,打开对应视图即可对其操作。 【示例11-29】使用SQL Developer工具在为视 图w_cus添加数据,顾客编号为983的,city必 须赋值为Lansing。 从图中,看出数据成功插入。 11.2.5 使用SQL Developer工具访 问视图 3.视图数据的删除 视图中删除数据时,直接选中对应行,单 击“X”按钮,即可完成删除视图数据,因为 其操作很简单,这里我们就不介绍了。 对于多表连接视图,删除操作也是不允许 的。 11.3 内嵌视图的创建和使用 内嵌视图不需要视图名,只是一段SQL语 句,通常在子查询中作为一个中间数据集 ,它可以在增加、删除、修改操作中使 用。内嵌视图无须创建真正的数据库对象 ,而只是封装查询,因此会节约数据库资 源。 11.3 内嵌视图的创建和使用 【示例11-30】在表orders中存储了顾客的订单 信息,现欲获取order_total最多的前三个订单 的信息。结合利用rownum3的条件可以返回 前三行行记录。 【示例11-31】在示例11-14中,使用了内嵌视 图获得了订单最多的三个记录。同时,还想获 得这些订单对应的顾客的联系方式,那么可以 使用内嵌视图与表customersnew进行连接。此 时,在内嵌视图与表customersnew中会存在重 复列,因此,需要为内嵌视图指定别名。 11.4 视图的修改 视图的修改比较特殊,不能像表一样修改 ,更准确的说他没有修改选项,我们采用 覆盖原有视图的方法来修改视图,但这并 不会影响视图的使用。因为视图本身不包 含数据,所以覆盖原有视图时就不存在数 据丢失的问题。本小节将主要介绍使用SQL Developer视图结构和视图数据的修改等操 作。 11.4.1 使用语句修改视图 如果发现视图的定义不合适,可以对其进行修改。实际上 视图中的select语句是不能直接修改的,所以修改视图的一 种方法是先删除视图,再重新创建。另一种方法是在创建 视图的create语句中使用or replace选项。带or replace选项 的create语句语法结构如图所示。 11.4.2 使用SQL Developer工具修 改视图 下面我们用SQL Developer演示一下修改视 图的结构。 【示例11-32】使用SQL Developer工具修改 视图vw_cus,将视图中customer_id字段取 别名为id。 11.4.3 使用OEM修改视图 除了使用语句和SQL Developer工具更改视 图外,也可以使用OEM修改视图。 【示例11-33】使用OEM修改视图vw_cus。 11.5 视图的删除 视图的删除和表删除操作方式一样,可

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论