Oracle入门第五天(上)——数据库对象之视图
一、概述
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入门第五天(上)——数据库对象之视图的更多相关文章
- java入门第五步之数据库项目实战【转】
在真正进入代码编写前些进行一些工具的准备: 1.保证有一个可用的数据库,这里我用sql server 2000为例,2.拥有一个ide,如ecelise或myeclipse等,这里我使用的是myecl ...
- Oracle入门第五天(下)——数据库其他对象
一.概述 其他数据库对象 主要掌握的为序列 二.序列 1.什么是序列 序列: 可供多个用户用来产生唯一数值的数据库对象 自动提供唯一的数值 共享对象 主要用于提供主键值 将序列值装入内存可以提高访问效 ...
- Oracle入门第四天(上)——表管理与数据处理
一.常见数据库对象 1.基本对象 对应的对象英文名参考:https://docs.oracle.com/cd/B19306_01/server.102/b14220/intro.htm#sthref6 ...
- DBArtist之Oracle入门第4步: Oracle创建数据库
刚开始进去后,我是懵逼的状态,不知道要干嘛,之前常用的是MSSQL,感觉两者还是有区别的: oracle中:1.查询数据库名:select name,dbid from v$database;或者sh ...
- JavaMail入门第五篇 解析邮件
上一篇JavaMail入门第四篇 接收邮件中,控制台打印出的内容,我们无法阅读,其实,让我们自己来解析一封复杂的邮件是很不容易的,邮件里面格式.规范复杂得很.不过,我们所用的浏览器内置了解析各种数据类 ...
- oracle学习笔记(十四) 数据库对象 索引 视图 序列 同义词
数据库对象 用户模式:指数据库用户所创建和存储数据对象的统称.在访问其它用户模式的数据库对象时需加上用户模式. 如:scott.emp, scott.dept等. 数据库对象包括:表.视图.索引.序列 ...
- oracle学习笔记(十四) 数据库对象 索引 视图 序列 同义词
数据库对象 用户模式:指数据库用户所创建和存储数据对象的统称.在访问其它用户模式的数据库对象时需加上用户模式. 如:scott.emp, scott.dept等. 数据库对象包括:表.视图.索引.序列 ...
- Oracle数据库对象_视图
视图是一种非常重要的数据库对象,它的形式类似于普通表,我们可以从视图中查询数据. 实际上它是建立在表上的一种虚表,在视图中并不存储真正的数据,而是仅仅保存一条SELECT语句,对视图的访问将被转化为对 ...
- 关于ORACLE通过file_id与block_id定位数据库对象遇到的问题的一点思考
在ORACLE中,我们可以通过file_id(file#)与block_id(block#)去定位一个数据库对象(object).例如,我们在10046生成的trace文件中file#=4 block ...
随机推荐
- C# 冒泡排序法、插入排序法、选择排序法
冒泡排序法 是数组等线性排列的数字从大到小或从小到大排序. 以从小到大排序为例. 数据 11, 35, 39, 30, 7, 36, 22, 13, 1, 38, 26, 18, 12, 5, 45, ...
- Asp.Net MVC Identity 2.2.1 使用技巧(七)
创建角色管理相关视图 1.添加视图 打开RolesAdminController.cs 将鼠标移动到public ActionResult Index()上 右键>添加视图 系统会弹出 ...
- 配置Ceph集群为OpenStack后端存储
配置Ceph存储为OpenStack的后端存储 1 前期配置 Ceph官网提供的配置Ceph块存储为OpenStack后端存储的文档说明链接地址:http://docs.ceph.com/docs/ ...
- Java Basic Notes——static修饰符
1.static 在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的,而所谓静态就是指在编译后所分配的内存会一直存在,直到程序退出内存才会释放这个空间,也就是只要程序在运行,那么这块内存就 ...
- hdu 5521 Meeting(最短路)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5521 题意:有1-n共n个点,给出m个块(完全图),并知道块内各点之间互相到达花费时间均为ti.已知两 ...
- c++ 基类,派生类的类型兼容性
#include <iostream> using namespace std; class CFather { public: void display() const { cout&l ...
- RedisClient的安装及基本使用
管理redis的可视化客户端目前较流行的有三个:Redis Client ; Redis Desktop Manager ; Redis Studio. 这里目前给大家介绍Redis Client 的 ...
- mongd配置文件解释
mongd配置文件解释 系统日志配置 systemLog: verbosity: <int> quiet: <boolean> traceAllExceptions: < ...
- POJ3304 Segments
嘟嘟嘟 题面就不说了,网上都有. 刚开始理解成了只要有不孤立的线段就算合法,结果就不会了--然而题中要求是所有线段至少有一个交点. 其实想一想就知道,问题转化为了是否存在一条直线和所有线段都有交点. ...
- 随手练——洛谷-P1002 过河卒(动态规划入门)
题目链接:https://www.luogu.org/problemnew/show/P1002 题目还算良心,提醒了结果可能很大,确实爆了int范围, 这是一开始写的版本,用递归做的,先给地图做标记 ...