91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Oracle中數據庫對象視圖怎么用

發布時間:2021-11-25 09:49:02 來源:億速云 閱讀:198 作者:小新 欄目:關系型數據庫

這篇文章主要介紹了Oracle中數據庫對象視圖怎么用,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

-  常見的數據庫對象:

對象描述
基本的數據存儲集合,由行和列組成
視圖從表中抽取的邏輯上相關的數據集合
序列提供有規律的數值
索引提高查詢的效率
同義詞給對象起的別名

1、Oracle的視圖介紹和創建

a、什么是視圖?

  • 視圖是一個虛擬的表,視圖建立在已有表的基本上,視圖賴以建立的這些表稱之為基表。

  • 向視圖提供數據內容的語句稱之為SELECT語句。

    b、為什么要使用視圖?

  • 主要出于兩個原因:

  • 1、安全原因,限制數據訪問;2、視圖可使復雜的查詢易于理解和使用。

    c、視圖的分類

  • 視圖分為簡單視圖、復雜視圖、連接視圖、只讀視圖:
    1、簡單視圖只從單表里獲取數據;不包含函數和數據組。
    2、復雜視圖從多表獲取數據;包含函數和數據組。
    3、連接視圖是指基于多個表建立的視圖,使用連接視圖能夠簡化連接查詢。
    4、只讀視圖只允許使用select語句,不允許其他DML語句的操作。

  • 附加說明:DML(data manipulation language):它們是SELECT、UPDATE、INSERT、DELETE,就象它的名字一樣,這4條命令是用來對數據庫里的數據進行操作的語言。

    d、如何創建視圖?

  • 創建視圖的語法格式:CREATE [OR REPLACE] VIEW view [(alias[, alias]...)] AS subquery [WITH CHECK OPTION [ CONSTRAINT constraint]] [WITH READ ONLY];

  • 需要注意的是,Oracle數據庫用戶必須具有CREATRE VIEW權限才能夠創建視圖。

  • 簡單視圖的創建示例:

  • 建立用于查詢員工號、姓名、工資的視圖。

    SQL> conn sys/02000059 as sysdba;
    已連接。
    SQL> grant create view to scott;
    授權成功。
    SQL> conn scott/02000059
    已連接。
    SQL> create VIEW emp_view AS select empno, ename, sal FROM emp;
    視圖已創建。
    • 視圖是一張虛擬的表,和表一樣,可以通過SELECT語句進行查詢。

      SQL> select * from emp_view;
               EMPNO ENAME             SAL
                  7951 EASON            3000
                  7369 G_EASON           800
                  7499 ALLEN            1600
                  ......
                  7900 JAMES             950
                  7902 FORD             3000
                  7934 MILLER           1300
      已選擇15行。
  • 在創建視圖時可以修改列的名稱。

        SQL> create VIEW emp_view2(員工號, 員工名,工資) AS select empno, ename, sal FROM emp;
        視圖已創建。
        SQL> select * from emp_view2;
                員工號 員工名           工資
                    7951 EASON            3000
                    7369 G_EASON           800
                    7499 ALLEN            1600
                    7521 WARD             1250
                    ......
                    7876 ADAMS            1100
                    7900 JAMES             950
                    7902 FORD             3000
                    7934 MILLER           1300
        已選擇15行。

  • 創建連接視圖示例:

  • 建立用于獲取部門號為10的部門號、部門名稱以及員工信息。

    SQL> CREATE VIEW dept_emp_view AS SELECT d.deptno, d.dname, e.empno, e.ename, e.job FROM dept d, emp e WHERE d.deptno = e.deptno AND d.deptno = 10;
    視圖已創建。
        SQL> select * from dept_emp_view;
                        DEPTNO DNAME           EMPNO ENAME      JOB
                        10 ACCOUNTING           7782 CLARK      MANAGER
                        10 ACCOUNTING           7839 KING       PRESIDENT
                        10 ACCOUNTING           7934 MILLER     CLERK

  • 只讀視圖示例:建立查看10號部門員工信息的視圖。

    SQL> CREATE VIEW emp_view3 AS select * from emp where deptno = 10 with read only;
    視圖已創建。
    SQL> update emp_view3 set sal = sal + 50;
    update emp_view3 set sal = sal + 50
    第 1 行出現錯誤:
    ORA-42399: 無法對只讀視圖執行 DML 操作

    2、Oracle視圖的查詢修改與刪除

    a、視圖上的DML操作

  • 查詢視圖-select,如:select * from emp_view;

  • 添加數據-insert,如:insert into empnew_view(empno, ename, sal) values(8888, 'LAYNA', 6666);

  • 修改數據-update,如:update emp_view set sal = sal + 100 where empno = 8888;

  • 刪除數據-delete,如:delete from emp_view where empno = 8888;

  • 注意:針對視圖的更新操作(insert、update、delete)實際上改變的是基表中的數據。

    b、在創建視圖時定義check約束

  • WITH CHECK OPTION選項用于在視圖上定義CHECK約束

  • 示例:CHREATE VIEW emp_view4 AS SELECT * FROM emp_view WHERE deptno = 20 WITH CHECK OPTION chk_view;

    SQL> create view dept_emp_view2 as select * from dept_emp_view where deptno = 10 with check option constraint ck_view;
    視圖已創建。
    SQL> select * from dept_emp_view2;
            DEPTNO DNAME               EMPNO ENAME      JOB
                    10 ACCOUNTING           7782 CLARK      MANAGER
                    10 ACCOUNTING           7839 KING       PRESIDENT
                    10 ACCOUNTING           7934 MILLER     CLERK
    SQL> update dept_emp_view set deptno = 20 where empno = 7782;
    update dept_emp_view set deptno = 20 where empno = 7782
    第 1 行出現錯誤:
    ORA-01779: 無法修改與非鍵值保存表對應的列
  • check約束的作用是在添加或者修改數據時數據必須滿足with check option前的where子句的條件。如上例:修改和添加數據時deptno 的值必須為10。

    c、修改視圖

  • 使用CREATE OR REPLACE VIEW 子句修改視圖。

  • 示例:CREATE OR REPLACE VIEW emp_view AS SELECT * FROM emp WHERE job = 'SALESMAN';

    SQL> CREATE OR REPLACE VIEW emp_view AS SELECT * FROM emp WHERE job = 'SALESMAN';
    視圖已創建。

    d、刪除視圖

  • 當視圖不再需要時,用戶可以執行DROP view語句刪除視圖。(不會刪除基表)

    SQL> DROP VIEW emp_view;
    視圖已刪除。
    SQL> select * from emp_view;
    select * from emp_view
    第 1 行出現錯誤:
    ORA-00942: 表或視圖不存在

    3、Oracle的復雜視圖

    a、什么是復雜視圖?

  • 復雜視圖是指包含函數、表達式或者分組數據的視圖,它主要用于執行查詢操作。

  • 注意:當定義復雜視圖時,必須要為函數或者表達式定義列的別名。

    b、創建復雜視圖

  • 示例:創建用于獲得每個崗位平均工資、工資總和、最高工資和最低工資的視圖。

    SQL> create VIEW job_view(job, avgsal, sumsal, maxsal, minsal) AS SELECT job, avg(sal), sum(sal), max(sal), min(sal) FROM emp GROUP BY job;
    視圖已創建。
    SQL> select * from job_view;
    JOB           AVGSAL     SUMSAL     MAXSAL     MINSAL
    CLERK         1037.5       4150       1300        800
    SALESMAN        1400       5600       1600       1250
    PRESIDENT       5000       5000       5000       5000
    MANAGER   2758.33333       8275       2975       2450
    ANALYST         3000       9000       3000       3000

    c、復雜視圖上執行DML操作的原則

  • DELETE操作原則,視圖中包含以下元素之一不能執行delete操作:

  • group by子句、分組函數、distinct關鍵字、rownum偽列。

  • UPDATE操作原則,視圖中包含以下元素之一不能執行update操作:

  • group by子句、分組函數、dinstinct關鍵字、rownum偽列、使用表達式定義的列。

  • INSERT操作原則,視圖中包含以下元素之一不能執行insert操作:

  • group by子句、分組函數、dinstinct關鍵字、rownum偽列、使用表達式定義的列、視圖上沒有包含基表的NOT NULL列。

感謝你能夠認真閱讀完這篇文章,希望小編分享的“Oracle中數據庫對象視圖怎么用”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

济源市| 平安县| 枣阳市| 磐石市| 图木舒克市| 迁安市| 阿拉善右旗| 杭锦后旗| 于都县| 青岛市| 长兴县| 迁西县| 巧家县| 乌兰浩特市| 彭阳县| 溧阳市| 新津县| 西丰县| 莆田市| 龙岩市| 江西省| 上虞市| 辰溪县| 梅州市| 宁乡县| 金阳县| 蒙自县| 古丈县| 无棣县| 柳林县| 呼和浩特市| 新巴尔虎右旗| 卢湾区| 晋中市| 岐山县| 清流县| 丰镇市| 绥宁县| 措美县| 玉山县| 泸州市|