DDL-数据定义语句:

二、视图

--视图(view),本身不保存数据,保存的是一个查询语句
--对视图的操作等同于对查询语句中源数据的操作
--视图占用存储空间较小,可以快速的对特定数据进行访问和操作
--视图主要用于针对相同的数据,创建不同的视图来区分访问和操作的权限
--创建适当的视图可以简化查询语句
--创建视图需要相应的权限

/*
create 【or replace】 view 视图名称
【(列名1,列名2,……)】
as
select ……
【with read only】;

or replace 如果不写,创建的视图名称已经存在会报错
如果写上 or replace 则同名的视图会被替换

with read only 表示该视图只能查看,不能修改数据
*/

--使用管理员给scott用户赋予创建视图的权限
GRANT CREATE VIEW TO scott;

1.区分权限
--emp表针对不同的员工和职位,能够访问和操作的数据不一样
--boss和hr 可以查看和修改所有员工的信息,直接使用emp
--部门经理可以查看和修改本部门的员工信息
--普通员工只能查看自己的信息,不能修改

--针对部门经理和普通员工创建不同的视图进行区别

--部门经理的视图
CREATE VIEW v_dept20
AS
SELECT * FROM emp
WHERE deptno = 20;

--对视图的操作与对表的操作一致
SELECT * FROM v_dept20;

--对视图中数据的修改等同于对源表中数据的修改
UPDATE v_dept20
SET sal = 1500
WHERE ename = 'SMITH';

SELECT * FROM emp;

--普通员工的视图
CREATE VIEW v_7369
AS
SELECT empno,ename,job,sal,deptno FROM emp
WHERE empno = 7369
WITH READ ONLY;

SELECT * FROM v_7369;

UPDATE v_7369
SET sal = 2000;

2.简化查询语句

--查询research部门的员工人数
1)子查询
SELECT COUNT(*) FROM emp
WHERE deptno =
(SELECT deptno FROM dept WHERE dname = 'RESEARCH');

2)多表查询
SELECT COUNT(e.empno)
FROM emp e,dept d
WHERE e.deptno = d.deptno
AND d.dname = 'RESEARCH';

3)视图
--如果有些表之间的数据关系很密切,经常互相作为条件进行查询
--可以提前准备好相应的视图,从视图中查询数据
CREATE VIEW emp_dept
AS
SELECT e.*,d.deptno dno,d.dname,d.loc
FROM emp e,dept d
WHERE e.deptno(+) = d.deptno;

SELECT * FROM emp_dept;

--查询research部门的员工人数
SELECT COUNT(*) FROM emp_dept
WHERE dname = 'RESEARCH';

三、索引

--索引(index)给表中的某列数据创建索引,可以提高查询效率
--表中的每行数据所存储的位置都有一个rowid
SELECT ename,ROWID FROM emp;
--索引将数据和rowid的关系对应起来,直接通过rowid访问数据的存储位置
--经常作为查询条件的列创建索引提高查询效率

1.B树索引
--create index 索引名称 on 表名(列名);
CREATE INDEX index1 ON emp(ename);

--确认索引的创建
SELECT * FROM user_indexes;

--索引不需要使用,当查询语句中的条件用到相关的列时,索引会自动提高查询效率
--当表中数据发生变化时,索引也会自动更新,将相关数据关联起来

--b树索引适用于某列数据有大量的不相同的数据时
--当某一列有大量重复的数据时,不适合使用b树索引,应该使用位图索引

2.位图索引
--位图索引使用二进制数来存储具体某一行的键值
--create bitmap index 索引名称 on 表名(列名);
CREATE BITMAP INDEX index2 ON emp(deptno);

Oracle-DDL 2- 视图&索引的更多相关文章

  1. Oracle学习2 视图 索引 sql编程 游标 存储过程 存储函数 触发器

    ---视图 ---视图的概念:视图就是提供一个查询的窗口,来操作数据库中的数据,不存储数据,数据在表中. ---一个由查询语句定义的虚拟表. ---查询语句创建表 create table emp a ...

  2. Oracle数据库之视图与索引

    Oracle数据库之视图与索引 1. 视图简介 视图是基于一个表或多个表或视图的逻辑表,本身不包含数据,通过它可以对表里面的数据进行查询和修改. 视图基于的表称为基表,视图是存储在数据字典里的一条SE ...

  3. Oracle-序列-存储过程-视图-索引-触发器

    课程介绍 1. 约束(掌握) 2. 序列(掌握) 3. 索引(掌握) 4. 视图(掌握) 5. 存储过程(掌握) 6. 自定义函数(掌握) 7. 触发器(掌握) 数据库对象的命名规则 1.对象名称必须 ...

  4. Oracle之物化视图

    来源于:http://www.cnblogs.com/Ronger/archive/2012/03/28/2420962.html 近期根据项目业务需要对oracle的物化视图有所接触,在网上搜寻关于 ...

  5. 《oracle每天一练》Oracle之物化视图

    相关帖子思考和跟踪 本文转自Ronger 物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的.普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实 ...

  6. 深入学习Oracle分区表及分区索引

    关于分区表和分区索引(About Partitioned Tables and Indexes)对于10gR2而言,基本上可以分成几类: •       Range(范围)分区 •       Has ...

  7. oracle 分区表和分区索引

    很复杂的样子,自己都没有看完,以备后用 http://hi.baidu.com/jsshm/item/cbfed8491d3863ee1e19bc3e ORACLE分区表.分区索引ORACLE对于分区 ...

  8. ORACLE分区表、分区索引详解

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt160 ORACLE分区表.分区索引ORACLE对于分区表方式其实就是将表分段 ...

  9. 【三思笔记】 全面学习Oracle分区表及分区索引

    [三思笔记]全面学习Oracle分区表及分区索引 2008-04-15 关于分区表和分区索引(About PartitionedTables and Indexes) 对于 10gR2 而言,基本上可 ...

  10. 类型:Oracle;问题:oracle 查询表详细信息;结果:oracle查询表信息(索引,外键,列等)

    oracle查询表信息(索引,外键,列等) oracle中查询表的信息,包括表名,字段名,字段类型,主键,外键唯一性约束信息,索引信息查询SQL如下,希望对大家有所帮助: 1.查询出所有的用户表sel ...

随机推荐

  1. RestFul是啥

    1. 什么是REST REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移. 它首次出现在2000年Roy Fielding的 ...

  2. 51 Nod 1282 时钟 (循环中的最小表示+哈希)

    1282 时钟  题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 有N个时钟,每个时钟有M个指针,P个刻度.时钟是圆形 ...

  3. 2018第九届蓝桥杯C/C++ A组试题答案参考

    题目1 标题:分数 1/1 + 1/2 + 1/4 + 1/8 + 1/16 + .... 每项是前一项的一半,如果一共有20项,求这个和是多少,结果用分数表示出来.类似:3/2当然,这只是加了前2项 ...

  4. CDOJ 1269 ZhangYu Speech 数组处理

    ZhangYu Speech Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submi ...

  5. 2019.12.12网页设计大赛&2019.12.13程序设计大赛观后感

    有幸参加了一次网页设计大赛和程序设计大赛,其实在大一的时候就参加过一次程序设计大赛,那时候也没怎么听,现在又有了一次机会来听,这次就认真的听了这两次的比赛,也有很多的感悟. 1.要学习完成一个任务的多 ...

  6. 进程间通信之管道--pipe和fifo使用

    匿名管道pipe 函数原型: #include <unistd.h> int pipe(int fildes[2]); 参数说明 fildes是我们传入的数组,也是一个传出参数.filde ...

  7. R-seq()

    seq(0, 1, length.out = 11) > seq(0, 1, length.out = 11) [1] 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0 ...

  8. 「Luogu P5601」小D与笔试

    题目链接 戳我 \(Solution\) 这道题官方题解的做法太复杂了,还需要扫字符串. 其实只需要两个\(map\)就好了. 一个\(map<string,stirng>\)用来记录题目 ...

  9. linux安装vlc视频播放器

    文章来自转发 最近,打算在centos7.2上安装一个叫MPlayer的视频播放器,但是折腾好久,得到的结果只是可以播放,但是却没有声音.无奈之下另寻他路.最后选择安装VLC视频播放器. 我的linu ...

  10. Redis内存满了的几种解决方法(内存淘汰策略与Redis集群)

    1,增加内存: 2,使用内存淘汰策略. 3,Redis集群. 重点介绍下23: 第2点: 我们知道,redis设置配置文件的maxmemory参数,可以控制其最大可用内存大小(字节). 那么当所需内存 ...