




已阅读5页,还剩36页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第11章视图 视图是Oracle提供的一种查询机制 该机制不仅可以简化各种查询 还可以保护数据库信息的安全 视图在数据库中可以理解为一张虚拟的表 使用视图可以补充表结构在某些需求方面的不足 可以让开发人员更方便地查询复杂数据 本章将主要介绍视图的概念 作用以及如何创建 查询 管理视图 11 1Oracle视图 初学者听到视图会比较陌生 实际上视图的创建和操作比较简单 在直观印象中它和表相似 但是它不具备表的某些功能 视图的使用和管理在许多方面和表相似 通俗来说我们一般把视图看作没有数据的表 本节就将介绍视图的概念和作用 11 1 1视图的概念 视图是由select查询语句定义的 基于一个或多个表 或视图 的一个逻辑表 视图本身不包含任何数据 也就是说视图只是一个查询语句的结果 它的数据最终是表中获取的 这些表我们可以称为基表 所以不需要在表空间中为视图分配存储空间 理解如图所示 11 1 2视图的作用 有读者可能会产生疑问 既然视图和表相似 为什么还要学习它 其实除了select语句之外 视图在insert update和delete语句方面受限制 视图的作用如下 1 使数据简化 2 使数据更加独立 3 增加安全性 11 1 3视图的分类 在Oracle数据库中 视图可以被分成这样几种类型 关系视图 内嵌视图 对象视图和物理化视图 在本书中 将学习关系视图和内嵌视图 关系视图就是一个续表 它可以定义对数据的查询 允许其他查询重复使用该对象 关系视图属于简单视图 在数据库字典中可以查看它的信息 内嵌视图则是子查询的一种 它适合不重用的对数据的查询 其他查询无法使用该视图 这种视图不需要create命令完成 所以在数据库字典中无法查看该视图的信息 11 2关系视图创建和使用 可以直接使用SQL语句创建一个视图 也可以使用工具SQLDeveloper 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 设置视图只读 readonly 通常简单的视图是允许进行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 设置视图约束 checkoption checkoption选项表示视图启动了和子查询条件一样的约束 也就是说 如果对视图修改或插入的数据和查询条件不一致 那么该操作会被终止 关于检查约束前面已经讲过 同样可以为视图设置检查约束 语法如图所示 11 2 1使用语句创建视图 示例11 11 创建视图 这个视图的作用是显示city是Lansing的顾客customer id cust first name cust last name city phone number 并且为此视图设置检查约束 示例11 12 通过Oracle中的数据字典user constraints 查询使用withcheckoption所创建的约束 11 2 2使用SQLDeveloper创建视图 对于记不住视图语法者 使用SQLDeveloper工具创建视图方便简洁 下面我们就为大家演示一下如何使用该工具来创建视图 示例11 13 使用SQLDeveloper工具创建一个基于两个表的视图 把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 查看视图定义视图创建之后 其定义存在于数据库中 可以通过SQLDeveloper的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 该视图设置了withcheckoption选项 要求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使用SQLDeveloper工具访问视图 使用SQLDeveloper对视图数据操作也很直观 简单 相对而言使用起来容易上手 在本小节为大家演示一下在SQLDeveloper下对视图数据的更新 插入 删除等 1 更新数据 示例11 26 使用SQLDeveloper工具在将视图w cus中 把视图中顾客编号为316的city改为北京 示例11 27 使用SQLDeveloper工具在将视图w cus中 把视图中顾客编号为316的cust first name改为Sissy 示例11 28 我们之前创建了视图w orders cus 该视图的源表是orders customersnew 使用该视图更新数据 将顾客编号为316的cust first name改为Angel 11 2 5使用SQLDeveloper工具访问视图 2 视图数据的插入有时候我们也可以为视图增加数据 为了操作简单 就以SQLDeveloper工具为例为大家简单演示一下视图添加数据的操作 和前面讲的修改数据一样 打开对应视图即可对其操作 示例11 29 使用SQLDeveloper工具在为视图w cus添加数据 顾客编号为983的 city必须赋值为Lansing 从图中 看出数据成功插入 11 2 5使用SQLDeveloper工具访问视图 3 视图数据的删除视图中删除数据时 直接选中对应行 单击 X 按钮 即可完成删除视图数据 因为其操作很简单 这里我们就不介绍了 对于多表连接视图 删除操作也是不允许的 11 3内嵌视图的创建和使用 内嵌视图不需要视图名 只是一段SQL语句 通常在子查询中作为一个中间数据集 它可以在增加 删除 修改操作中使用 内嵌视图无须创建真正的数据库对象 而只是封装查询 因此会节约数据库资源 11 3内嵌视图的创建和使用 示例11 30 在表orders中存储了顾客的订单信息 现欲获取order total最多的前三个订单的信息 结合利用rownum 3的条件可以返回前三行行记录 示例11 31 在示例11 14中 使用了内嵌视图获得了订单最多的三个记录 同时 还想获得这些订单对应的顾客的联系方式 那么可以使用内嵌视图与表customersnew进行连接 此时 在内嵌视图与表customersnew中会存在重复列 因此 需要为内嵌视图指定别名 11 4视图的修改 视图的修改比较特殊 不能像表一样修改 更准确的说他没有修改选项 我们采用覆盖原有视图的方法来修改视图 但这并不会影响视图的使用 因为视图本身不包含数据 所以覆盖原有视图时就不存在数据丢失的问题 本小节将主要介绍使用SQLDeveloper视图结构和视图数据的修改等操作 11 4 1使用语句修改视图 如果发现视图的定义不合适 可以对其进行修改 实际上视图中的select语句是不能直接修改的 所以修改视图的一种方法是先删除视图 再重新创建 另一种方法是在创建视图的create语句中使用orreplace选项 带orreplace选项的create语句语法结构如图所示 11 4 2使用SQLDeveloper工具修改视图 下面我们用SQLDeveloper演示一下修改视图的结构 示例11 32 使用SQLDeveloper工具修改视图vw cus 将视图中customer id字段取别名为id 11 4 3使用OEM修改视图 除了使用语句和SQLDeveloper工具更改视图外 也可以使用OEM修改视图 示例11 33 使用OEM修改视图vw cus 11 5视图的删除 视图的删除和表删除操作方
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 抚州市中石化2025秋招面试半结构化模拟题及答案油田工程技术岗
- 国家能源济源市2025秋招半结构化面试模拟30问及答案
- 中国广电漯河市2025秋招行业常识50题速记
- 中国联通贵港市2025秋招综合管理类专业追问清单及参考回答
- 中国联通山东地区2025秋招面试无领导高频议题20例
- 2025年职高冲刺考试题及答案
- 七台河市中石化2025秋招笔试行测50题速记
- 四平市中石化2025秋招笔试模拟题含答案新材料与新能源岗
- 信阳市中石油2025秋招面试半结构化模拟题及答案新材料与新能源岗
- 中国移动白银市2025秋招面试无领导高频议题20例
- 2025年职业培训学校建设项目可行性分析与初步设计方案报告
- 旅游项目可行性分析报告
- 保险业务员述职报告
- 中心静脉深静脉导管维护操作评分标准
- 导尿术操作护理课件
- 推进班组信息化建设:利用信息技术提高工作效率
- 2023年上海市虹口区初三一模语文试卷(含答案)
- 优势视角课件完整版
- 花城版音乐课时15-第12课 走近戏曲(一)观赏京剧学习念白-京剧丑角的念白《报灯名》-课件
- 《食品安全法》与粮食质量安全专题培训课件
- 2023年安康市交通建设投资集团有限公司招聘笔试题库及答案解析
评论
0/150
提交评论