zoukankan      html  css  js  c++  java
  • oracle视图总结(创建、查询、改动、删除等)

    视图定义:

    — —视图是一种虚表。

    — —视图建立在已有表的基础上, 视图赖以建立的这些表称为基表。
    — —向视图提供数据内容的语句为 SELECT 语句, 能够将视图理解为存储起来的 SELECT 语句.
    — —视图向用户提供基表数据的还有一种表现形式


    为什么使用视图?

    — —控制数据訪问
    — —简化查询
    — —避免反复訪问同样的数据


    创建视图:在 CREATE VIEW 语句中嵌入子查询,子查询能够是复杂的 SELECT 语句

    <span style="font-size:14px;">create or replace view empview 
    as 
    select employee_id emp_id,last_name name,department_name
    from employees e,departments d
    Where e.department_id = d.department_id</span>

    创建视图时在子查询中给列定义别名:在选择视图中的列时应使用别名

    <span style="font-size:14px;">CREATE VIEW  salvu50
    AS 
    SELECT  employee_id  ID_NUMBER, 
                last_name    NAME,
                salary*12    ANN_SALARY
    FROM    employees
    WHERE   department_id = 50;
    View created.</span>

    查询视图:SELECT  *  FROM    salvu50;


    改动视图:使用CREATE OR REPLACE VIEW 子句改动视图

    <span style="font-size:14px;">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;
    View created.</span>
    CREATE VIEW 子句中各列的别名应和子查询中各列相相应

    创建复杂视图举例:

    <span style="font-size:14px;">CREATE VIEW	dept_sum_vu
      (name, minsal, maxsal, avgsal)
    AS SELECT	 d.department_name, MIN(e.salary), 
                 MAX(e.salary),AVG(e.salary)
       FROM      employees e, departments d
       WHERE     e.department_id = d.department_id 
       GROUP BY  d.department_name;
    View created.</span>

    视图中使用DML的规定:

    能够在简单视图中运行 DML 操作
    当视图定义中包括下面元素之中的一个时不能使用delete:
    — —组函数
    — —GROUP BY 子句
    — —DISTINCT keyword
    — —ROWNUM 伪列

    <span style="font-size:14px;">create or replace view sal_view
    as select
    avg(salary) avg_sal from employees
    group by department_id
    </span>

    当视图定义中包括下面元素之中的一个时不能使用update:
    — —组函数
    — —GROUP BY子句
    — —DISTINCT keyword
    — —ROWNUM 伪列
    — —列的定义为表达式


    当视图定义中包括下面元素之中的一个时不能使insert:
    — —组函数
    — —GROUP BY 子句
    — —DISTINCT keyword
    — —ROWNUM 伪列
    — —列的定义为表达式
    — —表中非空的列在视图定义中未包含


    屏蔽 DML 操作:

    能够使用 WITH READ ONLY 选项屏蔽对视图的DML 操作
    不论什么 DML 操作都会返回一个Oracle server 错误

    <span style="font-size:14px;">CREATE OR REPLACE VIEW empvu10
        (employee_number, employee_name, job_title)
    AS SELECT	employee_id, last_name, job_id
       FROM     employees
       WHERE    department_id = 10
       WITH READ ONLY;
    View created.</span>

    删除视图:删除视图仅仅是删除视图的定义,并不会删除基表的数据
    <span style="font-size:14px;">DROP VIEW empvu80;
    View dropped.</span>

    Top-N 分析:

    查询最大的几个值的 Top-N 分析:

    <span style="font-size:14px;">SELECT [column_list], ROWNUM  
    FROM   (SELECT [column_list] 
            FROM table
            ORDER  BY Top-N_column)
    WHERE  ROWNUM <=  N;</span>
    注意:
    对 ROWNUM 仅仅能使用 < 或 <=, 而用 =, >, >= 都将不能返回不论什么数据。

    <span style="font-size:14px;">select *
    from(
    select rownum rn,employee_id,salary
    from(
    select employee_id,salary,last_name
    from employees
    order by salary desc
    )
    )where rn <=50 and rn >40</span>



























  • 相关阅读:
    如何让某一个窗口位于所有的窗口最上面
    CString ,BSTR ,LPCTSTR之间关系和区别
    PPT演讲放映技巧__备注的妙用
    链接集合
    男人靠什么吸引女人
    配置IISweb容器之程序下载
    用windows2003免费搭建外网流媒体服务器
    人类记忆规律及法则
    MFC基础知识总结
    VC 定位窗体常用方法
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/5375310.html
Copyright © 2011-2022 走看看