zoukankan      html  css  js  c++  java
  • Oracle(创建视图)

    概念:

    视图:所谓视图就是提取一张或者多张表的数据生成一个映射,管理视图可以同样达到操作原表的效果,方便数据的管理以及安全操作。

    视图其实就是一条查询sql语句,用于显示一个或多个表或其他视图中的相关数据。视图将一个查询的结果作为一个表来使用,因此视图可以被看作是存储查询结果的一个虚拟表。视图来源于表,所有对视图数据的修改最终都会被反映到视图的基表中,这些修改必须服从基表的完整性约束。

    视图的存储

    与表不同,视图不会要求分配存储空间,视图中也不会包含实际的数据。视图只是定义了一个查询,视图中的数据是从基表中获取,这些数据在视图被引用时动态的生成。由于视图基于数据库中的其他对象,因此一个视图只需要占用数据字典中保存其定义的空间,而无需额外的存储空间。

    视图的优势:

    1.信息隐藏

         比如s_emp表中有工资,可以创建视图,隐藏工资信息。(可以配合权限,让某个用户只能查看视图,不能查看表。)

    2.使复杂查询变得简单。

    3.数据独立

    4.相同数据的不同展示形式。

    视图的分类:

    1.简单视图

    2.复杂视图

    比较:

    简单视图 复杂视图

    涉及到的表个数   1 1个或多个

    包含函数  不包含 包含

    包含组数据   不包含 包含

    通过视图使用DML   可以 不可以

    视图的创建:

    CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view_name

    [(alias[, alias]...)]

    AS

    select 。。。。

    [WITH CHECK OPTION [CONSTRAINT constraint]]

    [WITH READ ONLY]

    note:

    1.or replace:代表修改view

    2.force| noforce: 即使基表不存在也要建立该视图 | 基表不存在就不建立此视图,默认值。

    3.alias: 视图中的列的名字(相当于给子查询的结果列起别名)

    4.子查询中可以包含复杂的查询语法,这些细节都对用户隐藏。

    5.子查询中不能包含order by子句。

    6.WITH CHECK OPTION 插入或修改的数据行必须满足视图定义的约束;换句话说,加上该关键词表示对view进行dml操作的时候,只能操作select语句中where条件限制的内容

    7.WITH READ ONLY :该视图只读,不能在这个视图上进行任何DML操作。

    8.查看视图结构: desc view_name;

    例如:

    create or replace view myView

    as

    select id,last_name,start_date

    from s_emp

    where id <= 4;

    此时可以使用:

    1.查看视图中所有数据信息

    select * from myView

    2.执行插入:

     insert into myView values(111,'haha','03-5-16'); 插入成功!

    3.再次查看,找不到刚插入的数据,因为这条数据不满足id<=4,但是查看原始表s_emp,有这条数据。

    如果:

    create or replace view myView

    (id,name,s_date)

    as

    select id,last_name,start_date

    from s_emp

    where id <= 4

    with check option;

     此时可以使用:

    1.查看视图中所有数据信息

    select * from myView

    2.执行插入:

     insert into myView values(121,'haha','03-5-16'); 插入失败!,因为视图的约束时id<=4,现在插入的id值为121,所以失败!

    create or replace view myView

    (id,name,s_date)

    as

    select id,last_name,start_date

    from s_emp;

    or

    create or replace view myView

    as

    select id,last_name,start_date s_date

    from s_emp;

    myView中列的名字都为id,name,s_Date.

    创建复杂视图:

    复杂视图可能包含分组,组函数,多表连接等。

    例如:

    CREATE or replace VIEW myView

    (name, minsal, maxsal, avgsal)

    AS SELECT d.name, MIN(e.salary),

    MAX(e.salary), AVG(e.salary)

    FROM s_emp e, s_dept d

    WHERE e.dept_id = d.id

    GROUP BY d.name;

    查看视图信息

    可以使用数据字典user_views;

    删除视图对象:

    ROP VIEW view_name; 

  • 相关阅读:
    Vue源码学习(二)——生命周期
    Android MediaPlayer
    iOS项目开发实战——iOS网络编程获取网页Html源码
    iOS 开发之IPad的设计与实现
    Netty In Action中文版
    Valid Palindrome
    Jetty 类载入问题处理
    JSONArray和JSONObject的简单使用
    ExtAspNet依据Grid导出Excel
    C++中的指针、数组指针与指针数组、函数指针与指针函数
  • 原文地址:https://www.cnblogs.com/yzqm666/p/5886917.html
Copyright © 2011-2022 走看看