Oracle-DDL 2- 视图&索引
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- 视图&索引的更多相关文章
- Oracle学习2 视图 索引 sql编程 游标 存储过程 存储函数 触发器
---视图 ---视图的概念:视图就是提供一个查询的窗口,来操作数据库中的数据,不存储数据,数据在表中. ---一个由查询语句定义的虚拟表. ---查询语句创建表 create table emp a ...
- Oracle数据库之视图与索引
Oracle数据库之视图与索引 1. 视图简介 视图是基于一个表或多个表或视图的逻辑表,本身不包含数据,通过它可以对表里面的数据进行查询和修改. 视图基于的表称为基表,视图是存储在数据字典里的一条SE ...
- Oracle-序列-存储过程-视图-索引-触发器
课程介绍 1. 约束(掌握) 2. 序列(掌握) 3. 索引(掌握) 4. 视图(掌握) 5. 存储过程(掌握) 6. 自定义函数(掌握) 7. 触发器(掌握) 数据库对象的命名规则 1.对象名称必须 ...
- Oracle之物化视图
来源于:http://www.cnblogs.com/Ronger/archive/2012/03/28/2420962.html 近期根据项目业务需要对oracle的物化视图有所接触,在网上搜寻关于 ...
- 《oracle每天一练》Oracle之物化视图
相关帖子思考和跟踪 本文转自Ronger 物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的.普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实 ...
- 深入学习Oracle分区表及分区索引
关于分区表和分区索引(About Partitioned Tables and Indexes)对于10gR2而言,基本上可以分成几类: • Range(范围)分区 • Has ...
- oracle 分区表和分区索引
很复杂的样子,自己都没有看完,以备后用 http://hi.baidu.com/jsshm/item/cbfed8491d3863ee1e19bc3e ORACLE分区表.分区索引ORACLE对于分区 ...
- ORACLE分区表、分区索引详解
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt160 ORACLE分区表.分区索引ORACLE对于分区表方式其实就是将表分段 ...
- 【三思笔记】 全面学习Oracle分区表及分区索引
[三思笔记]全面学习Oracle分区表及分区索引 2008-04-15 关于分区表和分区索引(About PartitionedTables and Indexes) 对于 10gR2 而言,基本上可 ...
- 类型:Oracle;问题:oracle 查询表详细信息;结果:oracle查询表信息(索引,外键,列等)
oracle查询表信息(索引,外键,列等) oracle中查询表的信息,包括表名,字段名,字段类型,主键,外键唯一性约束信息,索引信息查询SQL如下,希望对大家有所帮助: 1.查询出所有的用户表sel ...
随机推荐
- gulp+babel 实时转es6
1.安装gulp npm install gulp 2.得到package.json文件 npm init 2.全局安装Babel. npm install -g babel-cli npm ...
- 博弈dp入门 POJ - 1678 HDU - 4597
本来博弈还没怎么搞懂,又和dp搞上了,哇,这真是冰火两重天,爽哉妙哉. 我自己的理解就是,博弈dp有点像对抗搜索的意思,但并不是对抗搜索,因为它是像博弈一样,大多数以当前的操作者来dp,光想是想不通的 ...
- 修改hive 默认fs为s3 遇到的坑
问题: hive我修改了 默认的f <property> <name>fs.defaultFS</name> <value>hdfs://...:802 ...
- React Redux 与胖虎
这是一篇详尽的 React Redux 扫盲文. 对 React Redux 已经比较熟悉的同学可以直接看 <React Redux 与胖虎他妈>. 是什么 React Redux 是 R ...
- svn 同步备份的所有问题,亲测可用
svnsync 异地同步收获 (2010-07-06 10:06:19) 转载▼ 标签: 杂谈 分类: svn svnsync 异地同步收获: 来自:我用Subversion - http://www ...
- idea 远程代码调试
声明一点:重要的事情说3遍 本地代码和服务器代码必须一致 本地代码和服务器代码必须一致 本地代码和服务器代码必须一致 第一步,创建remote 第二步.填写服务器信息 第三部.tomcat/bin/s ...
- Java Date转Json报错解决方案
报错信息为: Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImp ...
- linux中~和/,$和#的区别
/是目录层的分隔.表示符.只有一个/表明是root,/etc/表明是根目录下面的etc目录(当然目录最后不需要/,但有/直接表明他是目录,没有末尾的/,那么/etc需要检测一下确定是目录还是文件,虽然 ...
- list元素按照日期排序
private static void ListSort(List<AppClassInfoVo> list) { Collections.sort(list, new Comparato ...
- 如何在gradle项目中添加额外非开源jar包并提交代码
前提:项目开发中,遇到一个地方需要用到公司自定义的jar包,然后要放到代码里又不方便提交到私服 具体实施: 首先在项目中增加一个 libs目录,然后把这种非开源又不在私服上的jar包扔进去, 然后打开 ...