一、概述

  1.什么是视图(VIEW)

    视图 从表中抽出的逻辑上相关的数据集合(是一张虚表)。

  2.为什么使用视图

    1.控制访问

    2.简化查询

  3.视图的分类

    

二、视图管理

  1.创建视图

CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view
[(alias[, alias]...)]
AS subquery
[WITH CHECK OPTION [CONSTRAINT constraint]]
[WITH READ ONLY [CONSTRAINT constraint]];

  示例:

  

  这里出现个小插曲,我们根据之前的管理控制台的学习,给当前用户SCOTT添加创建VIEW的权限!

  以DBA的权限进入:(无需输入用户名密码)

  

  进入之后按照之前的操作流程增加权限——应用即可!

  可以通过子查询的列别名给视图指定列名!

  2.修改视图

  通过增加 OR REPLACE进行修改(实际上是替换了)

CREATE OR REPLACE VIEW empvu80
(id_number, name, sal, department_id)
AS SELECT employee_id, first_name || ' ' || last_name,
salary, department_id
FROM employees
WHERE department_id = 80;

  其他诸如设置视图只读等,可以通过视图创建处的语法进行操作!

  3.视图限制

  

  

  

  当然,以上都可以通过 WITH READ ONLY进行只读限制,限制DML操作

  4.删除视图

DROP VIEW viewname

三、TOP-N分析

  1.什么是TOP-N(基本上有些类似MySQL的limit了)

    Top-N 分析查询一个列中最大或最小的 n 个值:

    最大和最小的值的集合是 Top-N 分析所关心的

  2.语法

SELECT [column_list], ROWNUM
FROM (SELECT [column_list]
FROM table
ORDER BY Top-N_column)
WHERE ROWNUM <= N;

  注意: 对 ROWNUM(称之为伪列) 只能使用 < 或 <=, 而用 =, >, >= 都将不能返回任何数据。

  示例

  直接按照伪列(返回结果的行号,就是这个伪列了!)进行排序得到如下结果(注意WHERE 和 ORDER BY的顺序):

SELECT rownum,employee_id,last_name,salary
FROM employees
WHERE ROWNUM <= 10
ORDER BY salary DESC ROWNUM EMPLOYEE_ID LAST_NAME SALARY
---------- ----------- ------------------------- ----------
1 100 King 24000.00
2 101 Kochhar 17000.00
3 102 De Haan 17000.00
9 108 Greenberg 12000.00
4 103 Hunold 9000.00
10 109 Faviet 9000.00
5 104 Ernst 6000.00
6 105 Austin 4800.00
7 106 Pataballa 4800.00
8 107 Lorentz 4200.00 10 rows selected

  发现这个ROWNUM默认是按照employee_id来进行排序的!也就是把employee_id的前10个id进行了输出!

  我们进行修改,把排序好的表作为一个子表:

SELECT rownum,employee_id,last_name,salary
FROM(
SELECT employee_id,last_name,salary
FROM employees
ORDER BY salary DESC)
WHERE ROWNUM <= 10 ROWNUM EMPLOYEE_ID LAST_NAME SALARY
---------- ----------- ------------------------- ----------
1 100 King 24000.00
2 101 Kochhar 17000.00
3 102 De Haan 17000.00
4 145 Russell 14000.00
5 146 Partners 13500.00
6 201 Hartstein 13000.00
7 108 Greenberg 12000.00
8 147 Errazuriz 12000.00
9 205 Higgins 12000.00
10 168 Ozer 11500.00 10 rows selected

  更多的一个应用是用于分页上:  

SELECT *
FROM(
SELECT ROWNUM RN,A.*
FROM(
SELECT employee_id,last_name,salary
FROM employees
ORDER BY salary DESC) A ) B
WHERE B.RN >= 20 AND B.RN <=30

  这样,借助一个别名RN就摆脱了ROWNUM写法的控制,当然,也有另外一种写法:

SELECT *
FROM (SELECT ROWNUM RN, A.*
FROM (SELECT * FROM BPM_PROCVAR ORDER BY VARID) A
WHERE ROWNUM <= 40) B
WHERE B.RN >= 21;

  关于两种分页写法的详细探讨,参考https://www.cnblogs.com/ileaves/p/6393762.html

Oracle入门第五天(上)——数据库对象之视图的更多相关文章

  1. java入门第五步之数据库项目实战【转】

    在真正进入代码编写前些进行一些工具的准备: 1.保证有一个可用的数据库,这里我用sql server 2000为例,2.拥有一个ide,如ecelise或myeclipse等,这里我使用的是myecl ...

  2. Oracle入门第五天(下)——数据库其他对象

    一.概述 其他数据库对象 主要掌握的为序列 二.序列 1.什么是序列 序列: 可供多个用户用来产生唯一数值的数据库对象 自动提供唯一的数值 共享对象 主要用于提供主键值 将序列值装入内存可以提高访问效 ...

  3. Oracle入门第四天(上)——表管理与数据处理

    一.常见数据库对象 1.基本对象 对应的对象英文名参考:https://docs.oracle.com/cd/B19306_01/server.102/b14220/intro.htm#sthref6 ...

  4. DBArtist之Oracle入门第4步: Oracle创建数据库

    刚开始进去后,我是懵逼的状态,不知道要干嘛,之前常用的是MSSQL,感觉两者还是有区别的: oracle中:1.查询数据库名:select name,dbid from v$database;或者sh ...

  5. JavaMail入门第五篇 解析邮件

    上一篇JavaMail入门第四篇 接收邮件中,控制台打印出的内容,我们无法阅读,其实,让我们自己来解析一封复杂的邮件是很不容易的,邮件里面格式.规范复杂得很.不过,我们所用的浏览器内置了解析各种数据类 ...

  6. oracle学习笔记(十四) 数据库对象 索引 视图 序列 同义词

    数据库对象 用户模式:指数据库用户所创建和存储数据对象的统称.在访问其它用户模式的数据库对象时需加上用户模式. 如:scott.emp, scott.dept等. 数据库对象包括:表.视图.索引.序列 ...

  7. oracle学习笔记(十四) 数据库对象 索引 视图 序列 同义词

    数据库对象 用户模式:指数据库用户所创建和存储数据对象的统称.在访问其它用户模式的数据库对象时需加上用户模式. 如:scott.emp, scott.dept等. 数据库对象包括:表.视图.索引.序列 ...

  8. Oracle数据库对象_视图

    视图是一种非常重要的数据库对象,它的形式类似于普通表,我们可以从视图中查询数据. 实际上它是建立在表上的一种虚表,在视图中并不存储真正的数据,而是仅仅保存一条SELECT语句,对视图的访问将被转化为对 ...

  9. 关于ORACLE通过file_id与block_id定位数据库对象遇到的问题的一点思考

    在ORACLE中,我们可以通过file_id(file#)与block_id(block#)去定位一个数据库对象(object).例如,我们在10046生成的trace文件中file#=4 block ...

随机推荐

  1. 4、Node.js REPL(交互式解释器)

    Node.js REPL(Read Eval Print Loop:交互式解释器) 表示一个电脑的环境,类似 Window 系统的终端或 Unix/Linux shell,我们可以在终端中输入命令,并 ...

  2. 纯css3跑马灯demo

    我们写跑马灯一般都是用js控制定时器不断循环产生,但是定时器消耗比较大,特别是程序中很多用到定时器的时候,感觉有的时候比较卡.但是css3样式一般不会.这里主要的思路就是用css3代替js定时器实现一 ...

  3. POJ 3107 Godfather(树的重心)

    嘟嘟嘟 题说的很明白,就是求树的重心. 我们首先dfs一遍维护每一个点的子树大小,然后再dfs一遍,对于一个点u,选择子树中size[v]最小的那个和n - size[u]比较,取最大作为删除u后的答 ...

  4. 新版剑指offer14 剪绳子

    int maxProduct(int length){ ) ; ) ; ) ; ; == ) numof3 -= ; )/; ,numof3))*(,numof2)); }

  5. ArcSDE 数据迁移 Exception from HRESULT: 0x80041538问题及解决方案

    一.问题描述 1.采用gdb模板文件,在ArcSDE(数据服务器)中批量创建数据库表(数据迁移)时,用到接口ESRI.ArcGIS.Geodatabase.IGeoDBDataTransfer的方法T ...

  6. [转]百度地图API详解之地图坐标系统

    博客原文地址:http://www.jiazhengblog.com/blog/2011/07/02/289/ 我们都知道地球是圆的,电脑显示器是平的,要想让位于球面的形状显示在平面的显示器上就必然需 ...

  7. CVPR2018_Crafting a Toolchain for Image Restoration by Deep Reinforcement Learning

    CVPR2018_Crafting a Toolchain for Image Restoration by Deep Reinforcement Learning http://mmlab.ie.c ...

  8. Java性能监控

    Java性能监控 上次介绍了如何使用jvisualvm监控java,今天做进一步讲解!Java性能监控主要关注CPU.内存和线程. 在线程页中,点击线程Dump,可以生成threaddump日志,通过 ...

  9. C++设计一个不能被继承的类

    1. 方法一 将构造函数和析构函数设置为私有函数,重新定义公有的静态函数来创建和释放类. #include "stdafx.h" #include <iostream> ...

  10. 前端基础-BOM和DOM的介绍

    阅读目录 BOM和DOM的简述 DOM详细操作 事件 一.BOM和DOM的简述 到目前为止,我们已经学过了JavaScript的一些简单的语法.但是这些简单的语法,并没有和浏览器有任何交互. 也就是我 ...