zoukankan      html  css  js  c++  java
  • 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);

  • 相关阅读:
    每日总结2.26
    《梦断代码》阅读笔记三
    每日总结2.25
    每日总结2.24
    每日总结2.23
    每日总结2.22
    每日总结2.19
    《梦断代码》阅读笔记二
    Java-11 形参和实参
    Java-10 final用法
  • 原文地址:https://www.cnblogs.com/JodieRao/p/11358213.html
Copyright © 2011-2022 走看看