您好,登錄后才能下訂單哦!
這篇文章主要介紹了Oracle中數(shù)據(jù)庫(kù)對(duì)象視圖怎么用,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
- 常見(jiàn)的數(shù)據(jù)庫(kù)對(duì)象:
對(duì)象 | 描述 |
---|---|
表 | 基本的數(shù)據(jù)存儲(chǔ)集合,由行和列組成 |
視圖 | 從表中抽取的邏輯上相關(guān)的數(shù)據(jù)集合 |
序列 | 提供有規(guī)律的數(shù)值 |
索引 | 提高查詢的效率 |
同義詞 | 給對(duì)象起的別名 |
視圖是一個(gè)虛擬的表,視圖建立在已有表的基本上,視圖賴以建立的這些表稱之為基表。
向視圖提供數(shù)據(jù)內(nèi)容的語(yǔ)句稱之為SELECT語(yǔ)句。
主要出于兩個(gè)原因:
1、安全原因,限制數(shù)據(jù)訪問(wèn);2、視圖可使復(fù)雜的查詢易于理解和使用。
視圖分為簡(jiǎn)單視圖、復(fù)雜視圖、連接視圖、只讀視圖:
1、簡(jiǎn)單視圖只從單表里獲取數(shù)據(jù);不包含函數(shù)和數(shù)據(jù)組。
2、復(fù)雜視圖從多表獲取數(shù)據(jù);包含函數(shù)和數(shù)據(jù)組。
3、連接視圖是指基于多個(gè)表建立的視圖,使用連接視圖能夠簡(jiǎn)化連接查詢。
4、只讀視圖只允許使用select語(yǔ)句,不允許其他DML語(yǔ)句的操作。
附加說(shuō)明:DML(data manipulation language):它們是SELECT、UPDATE、INSERT、DELETE,就象它的名字一樣,這4條命令是用來(lái)對(duì)數(shù)據(jù)庫(kù)里的數(shù)據(jù)進(jìn)行操作的語(yǔ)言。
創(chuàng)建視圖的語(yǔ)法格式:CREATE [OR REPLACE] VIEW view [(alias[, alias]...)] AS subquery [WITH CHECK OPTION [ CONSTRAINT constraint]] [WITH READ ONLY];
簡(jiǎn)單視圖的創(chuàng)建示例:
建立用于查詢員工號(hào)、姓名、工資的視圖。
SQL> conn sys/02000059 as sysdba; 已連接。 SQL> grant create view to scott; 授權(quán)成功。 SQL> conn scott/02000059 已連接。 SQL> create VIEW emp_view AS select empno, ename, sal FROM emp; 視圖已創(chuàng)建。
視圖是一張?zhí)摂M的表,和表一樣,可以通過(guò)SELECT語(yǔ)句進(jìn)行查詢。
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行。
在創(chuàng)建視圖時(shí)可以修改列的名稱。
SQL> create VIEW emp_view2(員工號(hào), 員工名,工資) AS select empno, ename, sal FROM emp; 視圖已創(chuàng)建。 SQL> select * from emp_view2; 員工號(hào) 員工名 工資 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行。
創(chuàng)建連接視圖示例:
建立用于獲取部門(mén)號(hào)為10的部門(mén)號(hào)、部門(mén)名稱以及員工信息。
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; 視圖已創(chuàng)建。 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號(hào)部門(mén)員工信息的視圖。
SQL> CREATE VIEW emp_view3 AS select * from emp where deptno = 10 with read only; 視圖已創(chuàng)建。 SQL> update emp_view3 set sal = sal + 50; update emp_view3 set sal = sal + 50 第 1 行出現(xiàn)錯(cuò)誤: ORA-42399: 無(wú)法對(duì)只讀視圖執(zhí)行 DML 操作
查詢視圖-select,如:select * from emp_view;
添加數(shù)據(jù)-insert,如:insert into empnew_view(empno, ename, sal) values(8888, 'LAYNA', 6666);
修改數(shù)據(jù)-update,如:update emp_view set sal = sal + 100 where empno = 8888;
刪除數(shù)據(jù)-delete,如:delete from emp_view where empno = 8888;
注意:針對(duì)視圖的更新操作(insert、update、delete)實(shí)際上改變的是基表中的數(shù)據(jù)。
WITH CHECK OPTION選項(xiàng)用于在視圖上定義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; 視圖已創(chuàng)建。 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 行出現(xiàn)錯(cuò)誤: ORA-01779: 無(wú)法修改與非鍵值保存表對(duì)應(yīng)的列
check約束的作用是在添加或者修改數(shù)據(jù)時(shí)數(shù)據(jù)必須滿足with check option前的where子句的條件。如上例:修改和添加數(shù)據(jù)時(shí)deptno 的值必須為10。
使用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'; 視圖已創(chuàng)建。
當(dāng)視圖不再需要時(shí),用戶可以執(zhí)行DROP view語(yǔ)句刪除視圖。(不會(huì)刪除基表)
SQL> DROP VIEW emp_view; 視圖已刪除。 SQL> select * from emp_view; select * from emp_view 第 1 行出現(xiàn)錯(cuò)誤: ORA-00942: 表或視圖不存在
復(fù)雜視圖是指包含函數(shù)、表達(dá)式或者分組數(shù)據(jù)的視圖,它主要用于執(zhí)行查詢操作。
注意:當(dāng)定義復(fù)雜視圖時(shí),必須要為函數(shù)或者表達(dá)式定義列的別名。
示例:創(chuàng)建用于獲得每個(gè)崗位平均工資、工資總和、最高工資和最低工資的視圖。
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; 視圖已創(chuàng)建。 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
DELETE操作原則,視圖中包含以下元素之一不能執(zhí)行delete操作:
UPDATE操作原則,視圖中包含以下元素之一不能執(zhí)行update操作:
INSERT操作原則,視圖中包含以下元素之一不能執(zhí)行insert操作:
group by子句、分組函數(shù)、dinstinct關(guān)鍵字、rownum偽列、使用表達(dá)式定義的列、視圖上沒(méi)有包含基表的NOT NULL列。
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“Oracle中數(shù)據(jù)庫(kù)對(duì)象視圖怎么用”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。