lz0-007 读书笔记11
Creating Views
1.什么是视图?
•视图是基于表或另一个视图的逻辑表,一个视图并不包含它自己的数据
视图象一个窗口,通过该窗口可以查看或改变表中的数据。
•视图基于其上的表,称为基表(base tabl)
•视图在数据字典中作为一个SELECT语句存储
2.为什么用视图?
•限制数据访问,因为视图能够选择性的显示表中的列
•使得复杂的查询变得容易
•视图对特定的用户和应用程序提供数据独立性,一个视图可以从几个表中取回数据
•表现相同数据的不同观察,视图提供用户组按照他们的特定的标准访问数据
3.简单视图和复杂视图
•视图有两种分类:
简单视图和复杂视图,基本区别涉及DML (INSERT、UPDATE和DELETE) 操作
•简单视图:
− 数据仅来自一个表
− 不包含函数或数据分组
− 能通过视图执行DML操作
•复杂视图:
− 数据来自多个表
− 包含函数或数据分组
− 不总是允许通过视图进行DML操作
4.创建视图
•在CREATE VIEW语句中嵌入一个子查询
•语法:
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW 视图名
[(列别名[,列别名]...)]
AS
子查询
[WITH CHECK OPTION [CONSTRAINT 约束名]]
[WITH READ ONLY [CONSTRAINT 约束名]];
•说明:
FORCE 选项: 不管基表是否存在,都创建视图
NOFORCE 选项: 只有基表存在的情况下,才创建视图。这是默认选项
WITH CHECK OPTION 选项:指定只有在视图中可访问的行(子查询指定的行),才能被插入或修改
WITH READ ONLY 选项: 只读,确保在该视图中不能执行DML操作
5.创建视图的原则:
•定义一个视图的子查询可以包含复杂的SELECT语法,包括连接、分组和子查询。
•定义视图的子查询中不能包含 ORDER BY 子句。
•如果没有为用WITH CHECK OPTION选项创建的视图指定一个约束名,系统将自动指定一个名字(SYS_Cn)
•你可以用 OR REPLACE 选项改变视图的定义而无须删除和重新创建它,或重新授予以前已经授予它的对象权限。
6.视图中的别名:
•有两者方式为视图中的列指定别名:
–在子查询中使用别名,则子查询的列名列表就称为视图的列名列表
–在定义实体时,在AS关键字之前指定列名列表,指定的列的数目必须与子查询中的列的数目相符
7.从视图中取回数据
•可以象从任何表中取回数据一样从视图取回数据
8.与视图相关的数据字典
•一旦视图被创建,你就可以查询数据字典视图 USER_VIEWS,来查看视图的名字和视图定义
构成视图的子查询的文本被存储在数据字典 USER_VIEWS 的一个 LONG 列中
•当你用视图存取数据时,Oracle 服务器执行下面的操作:
1) 从数据字典表 USER_VIEWS 中取回视图定义。
2) 检查对视图的基表的数据存取权限。
3) 转换视图查询为一个在基表或表上的等价操作,换句话说,数据从基表得到,或更新基表。
9.视图中 DML 操作的执行规则
•可以在简单视图上执行DML 操作
•如果视图的子查询中包含下面的部分,就不能删除行(delete):
–组函数
–GROUP BY子句
–DISTINCT关键字
–伪列ROWNUM关键字
•如果视图中包含下面的部分就不能修改数据(update):
–组函数
–GROUP BY 子句
–DISTINCT 关键字
–伪列ROWNUM 关键字
–用表达式定义的列
•如果视图中包含下面的部分就不能通过视图添加数据(insert):
–组函数
–GROUP BY子句
–DISTINCT关键字
–伪列ROWNUM关键字
–用表达式定义的列
–基表中存在的NOT NULL的列,但却不在视图中
10.WITH CHECK OPTION 子句
•WITH CHECK OPTION 表示,在视图上插入和更新行时,产生的新行必须是能被视图显示的
如果产生的新行不属于视图所选择的行,将会报错。
11.WITH READ ONLY 选项
•可以在创建视图时带上WITH READ ONLY 选项,以确保无DML操作发生。
•如果用户没有提供约束名,系统将以SYS_Cn格式指定一个名字
•任何对带只读约束的视图进行的插入或修改行的尝试,Oracle都将提示错误
12.删除视图
•删除视图不会丢失数据,因为视图是基于数据库中的基表的
•删除视图不影响用于建立该视图的基表
•语法:
DROP VIEW 视图名 ;
13.内建视图(inline view)
•内建视图是一个带有别名(或相关名)的、可以在SQL语句中使用的子查询
•内建视图不是方案对象
•在一个主查询的FROM子句中指定的已命名子查询,就是一个内建视图的例子
•示例:
SELECT a.last_name, a.salary, a.department_id, b.maxsal
FROM employees a,
(SELECT department_id, max(salary) maxsal FROM employees GROUP BY department_id) b
WHERE a.department_id = b.department_id
AND a.salary < b.maxsal;
14.Top-N 分析
•Top-N 查询是寻找一列中的n个最大或最小值,例如:
–销售最好的前10 位产品是什么?
–销售最差的前10 位产品是什么?
•Top-N 分析的基本语法:
SELECT 列名列表,ROWNUM AS RANK
FROM (SELECT 列名列表 FROM 表名 ORDER BY 被分析的列 [ASC|DESC])
WHERE ROWNUM <= n ; -- top-n分析
•Top-N 分析查询语句的两个基本构成:
–在子查询中使用order by字句来进行排序
–在主查询中限制结果集能显示的行数(使用 ROWNUM 伪列)
•示例:
SELECT rownum as SENIOR,E.last_name, E.hire_date
FROM (SELECT last_name,hire_date FROM employees
ORDER BY hire_date) E
WHERE rownum <= 4;
转载于:https://www.cnblogs.com/zqf620/archive/2007/01/20/625549.html
lz0-007 读书笔记11相关推荐
- 大数据之路读书笔记-11事实表设计
大数据之路读书笔记-11事实表设计 文章目录 大数据之路读书笔记-11事实表设计 11.1 事实表基础 11.1.1 事实表特性 11.1.2 事实表设计原则 11.1.3 事实表设计方法 11.2 ...
- PUB/SUB Pattern-Oriented Software Architecture v1巨详细读书笔记 11
GoF的Observer有没有什么变体存在,他的别名可以叫什么?在本笔记中,Publisher-Subscriber(出版-订阅)模式为这些问题做了完美解答.在笔记的最后还描述了Pattern Sys ...
- 《Effective Java》读书笔记 - 11.序列化
Chapter 11 Serialization Item 74: Implement Serializable judiciously 让一个类的实例可以被序列化不仅仅是在类的声明中加上" ...
- 数据段描述符和代码段描述符(二)——《x86汇编语言:从实模式到保护模式》读书笔记11
这篇博文,我们编写一个C语言的小程序,来解析数据段或者代码段描述符的各个字段.这样我们阅读原书的代码就会方便一点,只要运行这个小程序,就可以明白程序中定义的数据段或者代码段的描述符了. 这段代码,我用 ...
- OCA读书笔记(11) - 实现Oracle数据库审计
11 Implementing Oracle Database Auditing 描述DBA对于安全和审计的职责 使能标准的数据库审计 安全审计选项 查看审计信息 维护审计路径 最小权限原则 只在计算 ...
- 读书笔记{11} VLAN及其在生产中的应用
1 LAN 简介 LAN,Local Area Network,直译为本地区域网,可能是因为为了方便传播,大家基本上都叫它局域网,既然大家都这么叫,如果我们搞特例那就是不明智了. 局域网这个词的侧重其 ...
- 魔兽世界编程宝典读书笔记(11)
第11章 向XML窗体中添加行为 我们现在已经创建了窗体.图形以及字体,并能对窗体的大小和位置进行设置,但是这些窗体都是静态的,不能同用户进行交互,或对任何游戏事件进行响应.本章 ...
- 数据挖掘导论读书笔记11异常检测
异常检测的目标是发现与大部分其他对象不同的对象.通常,异常对象被称作离群点(Outlier). 异常检测也称偏差检测(Deviation detection),因为异常对象的属性值明显偏离期望的或者常 ...
- 易经读书笔记11地天泰
天下太平,君子的责任 象曰 天地交,泰,后以财成天地之道,辅相天地之宜,以左右民. 财通裁 泰卦违背了自然的常理,天上地下.但只有这样,天地才会交,人间才会充满生机,才泰(天下太平). 泰:小往大来, ...
最新文章
- 什么是Attention机制以及Pytorch如何使用
- Centos下Yum安装PHP5.5,5.6
- 如何使用小数据集对大模型进行微调(迁移学习)-微迁移
- java使用AES256解密
- 做一个有梦想的咸鱼!
- 【Java基础】递归输出目录下所有文件路径
- oracle外表日期,三步教会你掌握oracle外表(external table)
- 如何卸载bytefence anti-malware
- 新浪微博客户端(27)-格式化工具条显示数字
- 4755. 快速荷叶叶变换
- Android项目开发实战——简单备忘录
- JavaScript 运算符优先级 - 汇总表
- 本地HTML文档批量翻译软件
- 老照片:一个澳洲人在大清国的徒步旅行
- 七张图,学会做有价值的经营分析
- 虚拟服务器怎么突破磁盘2t,创建一个拥有超过2T数据盘的Windows虚拟机
- redis集群增加节点和删除节点、或者reshard时报 migrating 错误
- 新版小O地图EXCEL版0.6.5.0--专业地图EXCEL插件
- Embedding之padding_idx学习
- 拼在“最初一公里”的十万年轻人
热门文章
- linux vi 上下左右 ab,【Linux】Ubuntu vi 上下左右变ABCD及 apt-get install报错问题解决方法...
- Partition分析
- (34)FPGA原语设计(BUFGMUX)
- (22)FPGA面试题名词解释IRQ、BIOS、USB、VHDL、SDR
- php怎么将网页变成图片格式,php如何实现图片格式转换
- ajax php登陆界面,实例详解Ajax实现漂亮、安全的登录界面
- STM32 USART通信
- mysql linux安装百度经验_MySQL 安装(Windows Linux)
- 单机rust怎么设置白天_工业除尘器不会选 看看粉尘治理设备生产厂家怎么说
- synchronized实现同步的原理和锁状态