• Oracle视图


    一、视图的概念

    1.视图是一个虚拟表,视图并不在数据库中存储数据值,数据库中只在数据字典中存储对视图的定义。
    2、创建视图的语句

      CREATE [OR REPLACE]VIEW  view_name
          [(column_name1[,column_name2…])]
           AS
                select_statement
            [WITH CHECK OPTION]
            [WITH READ ONLY]

    3、参数说明

    CREATE OR REPALCE:修改视图的定义,其实质是删除原视图并重建该视图,但是会保留该视图上授予的各种权限。如果Oracle数据库中并没有该视图,直接create就可以。
    WITH CHECK OPTION :表示对视图的操作必须满足子查询中的约束条件。
    WITH READ ONLY :用于创建只读视图

    二.创建修改视图

    1、创建简单视图

    简单视图指基于单个表并且不包含函数或表达式的视图,在该视图上可以执行DML语句。
    例1:创建视图V_emp,用于查询员工的员工编号、姓、名、电话

    CREATE  VIEW V_emp
    AS
    SELECT Employee_ID ,Last_Name, First_Name , phone_number FROM Employees

    查询创建的视图信息用数据字典user_views
    例2:使用视图,请在视图V_emp中完成以下操作:
    1)查询该视图所有信息。SELECT * FROM V_emp;
    2)向该视图中插入记录:INSERT INTO V_emp values(employees_seq.nextval,’zhang’,’huan’,’123456’);

    2、创建复杂视图

    复杂视图指包含函数、表达式或者分组数据的视图,在该视图上执行DML语句时必须要符合特定条件。

    注:在定义复杂视图时必须为函数或表达式定义别名
    例3:创建视图V_orderdetail,用于查询每个产品的销售总数量和销售总金额

    CREATE VIEW V_orderdetail
    AS
    SELECT ProductID , sum(quantity)   total_quantity, sum(quantity*unitprice)   total_price
    FROM Orderdetails
    GROUP BY ProductID

    例4:使用视图V_orderdetail,查询产品编号为10的产品的销售总数量和销售总金额
    实现语句:

    SELECT *
    FROM V_orderdetail
    WHERE productid=10;

    查询视图中的某个列是否允许进行更新操作需要查询数据字典User_updatable_columns

    3、创建连接视图

    连接视图指基于多个表建立的视图,一般来说不会在该视图上执行INSERT、UPDATE、DELETE操作。
    例5:创建视图V_ord_ordetail,用于查询每个订单的订单编号、经销商编号、订购日期、订购的产品编号、产品名称、订购数量、订购单价。
    实现的语句为:

    CREATE  OR REPLACE VIEW V_ord_ordetail
    AS
    SELECT o.orderid,customerid,orderdate,p.productid,productname,quantity,od.unitprice
    FROM orders o JOIN orderdetails od
    ON o.orderid=od.orderid
    JOIN products p ON od.productid=p.productid;

    例6: 创建视图v_depart_empl,查询在“Sales”部门任职的员工的员工号、员工姓名、部门名称dname、职位名称job、工资sal和奖金信息

    create view v_depart_empl
    
    as
    
    select empno,ename,sal,comm,dname,d.deptno from emp e join dept d on e.deptno=d.deptno;

    4、创建只读视图

    只读视图指只允许进行SELECT操作的视图,在创建该视图时指定WITH READ ONLY选项。
    注:该视图上不能执行INSERT、UPDATE、DELETE操作。
    例7:建立一个只读视图V_ord_prod,要求查询产品表中类别编号为2的产品编号、产品名称、产品单价,类别编号。
    实现的语句为:

    CREATE OR REPLACE  VIEW V_ord_prod
    AS
    SELECT productid,productname,unitprice,categoryid
    FROM products WHERE categoryid=2
    WITH READ ONLY

    5、创建CHECK约束视图

    WITH  CHECK OPTION用于在视图上定义CHECK约束,即在该视图上执行INSERT或UPDATE操作时,数据必须符合查询结果.
    例8:建立一个带CHECK约束的视图V_check_prod,要求查询产品表中类别编号为2的产品编号、产品名称、产品单价,类别编号。
    实现的语句为:

    CREATE  VIEW v_check_prod (产品编号,产品名称,单价,类别)
    AS
    SELECT productid,productname,unitprice,categoryid
    FROM products WHERE categoryid=2
    WITH CHECK OPTION

    查询该视图各列的可更新性:

    select column_name,updatable,insertable,deletable from user_updatable_columns where table_name=' V_CHECK_PROD ‘

    三. 删除视图

    删除视图的语句格式:
    DROP VIEW view_name;
    例9:将视图t_view删除
    实现语句:

      DROP VIEW t_view;
  • 相关阅读:
    浅析ES6中的iterator
    nodejs中的异步回调机制
    用好js与nodejs中的try...catch
    vscode设置html默认浏览器
    nodejs中相互引用(循环引用)的模块分析
    ES6—带默认值的函数参数及其作用域
    函数声明与函数表达式的区别
    let块级引起的闭包思考
    进程与线程
    angular(^4)-监控表格按键行为的问题
  • 原文地址:https://www.cnblogs.com/CX66/p/14015699.html
Copyright © 2020-2023  润新知