zoukankan      html  css  js  c++  java
  • Oracle入门第五天(上)——数据库对象之视图

    一、概述

      1.什么是视图(VIEW)

        视图 从表中抽出的逻辑上相关的数据集合(是一张虚表)。

      2.为什么使用视图

        1.控制访问

        2.简化查询

      3.视图的分类

        

    二、视图管理

      1.创建视图

    CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view
      [(alias[, alias]...)]
     AS subquery
    [WITH CHECK OPTION [CONSTRAINT constraint]]
    [WITH READ ONLY [CONSTRAINT constraint]];

      示例:

      

      这里出现个小插曲,我们根据之前的管理控制台的学习,给当前用户SCOTT添加创建VIEW的权限!

      以DBA的权限进入:(无需输入用户名密码)

      

      进入之后按照之前的操作流程增加权限——应用即可!

      可以通过子查询的列别名给视图指定列名!

      2.修改视图

      通过增加 OR REPLACE进行修改(实际上是替换了)

    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;

      其他诸如设置视图只读等,可以通过视图创建处的语法进行操作!

      3.视图限制

      

      

      

       当然,以上都可以通过 WITH READ ONLY进行只读限制,限制DML操作

      4.删除视图

    DROP VIEW viewname

    三、TOP-N分析

      1.什么是TOP-N(基本上有些类似MySQL的limit了)

        Top-N 分析查询一个列中最大或最小的 n 个值:

        最大和最小的值的集合是 Top-N 分析所关心的

      2.语法

    SELECT [column_list], ROWNUM  
    FROM   (SELECT [column_list] 
            FROM table
            ORDER  BY Top-N_column)
    WHERE  ROWNUM <=  N;

      注意: 对 ROWNUM(称之为伪列) 只能使用 < 或 <=, 而用 =, >, >= 都将不能返回任何数据。

      示例

      直接按照伪列(返回结果的行号,就是这个伪列了!)进行排序得到如下结果(注意WHERE 和 ORDER BY的顺序):

    SELECT rownum,employee_id,last_name,salary 
    FROM employees
    WHERE ROWNUM <= 10
    ORDER BY salary DESC
    
        ROWNUM EMPLOYEE_ID LAST_NAME                     SALARY
    ---------- ----------- ------------------------- ----------
             1         100 King                        24000.00
             2         101 Kochhar                     17000.00
             3         102 De Haan                     17000.00
             9         108 Greenberg                   12000.00
             4         103 Hunold                       9000.00
            10         109 Faviet                       9000.00
             5         104 Ernst                        6000.00
             6         105 Austin                       4800.00
             7         106 Pataballa                    4800.00
             8         107 Lorentz                      4200.00
     
    10 rows selected

      发现这个ROWNUM默认是按照employee_id来进行排序的!也就是把employee_id的前10个id进行了输出!

      我们进行修改,把排序好的表作为一个子表:

    SELECT rownum,employee_id,last_name,salary
    FROM(
        SELECT employee_id,last_name,salary 
        FROM employees
        ORDER BY salary DESC)
    WHERE ROWNUM <= 10
    
        ROWNUM EMPLOYEE_ID LAST_NAME                     SALARY
    ---------- ----------- ------------------------- ----------
             1         100 King                        24000.00
             2         101 Kochhar                     17000.00
             3         102 De Haan                     17000.00
             4         145 Russell                     14000.00
             5         146 Partners                    13500.00
             6         201 Hartstein                   13000.00
             7         108 Greenberg                   12000.00
             8         147 Errazuriz                   12000.00
             9         205 Higgins                     12000.00
            10         168 Ozer                        11500.00
     
    10 rows selected

       更多的一个应用是用于分页上:  

    SELECT *
    FROM(
      SELECT ROWNUM RN,A.*
      FROM(
        SELECT employee_id,last_name,salary
        FROM employees
        ORDER BY salary DESC) A ) B
    WHERE B.RN >= 20 AND B.RN <=30

      这样,借助一个别名RN就摆脱了ROWNUM写法的控制,当然,也有另外一种写法:

    SELECT *
      FROM (SELECT ROWNUM RN, A.*
              FROM (SELECT * FROM BPM_PROCVAR ORDER BY VARID) A
             WHERE ROWNUM <= 40) B
     WHERE B.RN >= 21;

      关于两种分页写法的详细探讨,参考https://www.cnblogs.com/ileaves/p/6393762.html

  • 相关阅读:
    WCF 第八章 安全 确定替代身份(中)使用AzMan认证
    WCF 第八章 安全 总结
    WCF 第八章 安全 因特网上的安全服务(下) 其他认证模式
    WCF Membership Provider
    WCF 第八章 安全 确定替代身份(下)模仿用户
    WCF 第八章 安全 因特网上的安全服务(上)
    WCF 第九章 诊断
    HTTPS的七个误解(转载)
    WCF 第八章 安全 日志和审计
    基于比较的排序算法集
  • 原文地址:https://www.cnblogs.com/jiangbei/p/8214935.html
Copyright © 2011-2022 走看看