在Oracle中每一次查詢與關聯都是生成了一個新的表,這個表在一次查詢之后沒有辦法保存下來铃肯,我們引入了視圖的概念,通過視圖把多張單純表動態(tài)的組合到一張表中來達到上述效果,動態(tài)的組合是指原表或者視圖一個改變的時候另一個表也隨之改變擅编。
視圖介紹
視圖概念:視圖是一張?zhí)摂M邏輯表,把多張單獨的表動態(tài)組合成一張表并存儲到數據庫中
視圖優(yōu)點:
? ? ? ? 簡化用戶處理數據方式,可以使用簡單的查詢得到復雜插敘你的結果
? ? ? ? 著重于特定數據爱态,避免一些敏感數據或者無用的數據查詢出來
? ? ? ? 提供簡單有效的安全機制谭贪,定制不同用戶對數據的訪問權限
? ? ? ? 可以將視圖的數據導入到其他程序
視圖分類:視圖分為簡單視圖和復雜視圖
? ? ? ? 簡單視圖只能從單表獲取數據,復雜視圖從多表獲取數據
? ? ? ? 簡單視圖不包含函數和數據組锦担,復雜視圖包含
? ? ? ? 簡單函數可以實現DML操作俭识,復雜視圖不可以
? ? ? ? 如果簡單視圖創(chuàng)建使用with read only,該視圖不能進行DML操作
創(chuàng)建視圖
注:如果在scoot中想要擁有創(chuàng)建視圖的權限洞渔,需要賦予權限套媚,即使用系統用戶執(zhí)行grant create view to scott;語句(注意賦予語句后需要commit)。
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view_name
[(alias[, alias]...)]
AS subquery
[WITH CHECK OPTION [CONSTRAINT constraint]]
[WITH READ ONLY]
OR REPLACE ? ?若所創(chuàng)建的視圖已經存在磁椒,ORACLE自動重建該視圖堤瘤;
FORCE ? ? ? ? ? ? ?不管基表是否存在ORACLE都會自動創(chuàng)建該視圖;
NOFORCE ? ? ? ? 只有基表都存在ORACLE才會創(chuàng)建該視圖:
alias ? ? ? ? ? ? ? ? ? ?為視圖產生的列定義的別名浆熔;
subquery ? ? ? ? ? ?一條完整的SELECT語句本辐,可以在該語句中定義別名;
WITH CHECK? OPTION ?插入或修改的數據行必須滿足視圖定義的約束医增;
WITH READ ONLY ? ? ? ? ?該視圖上不能進行任何DML操作慎皱。
create view empv30(empno,ename,sal) as select empno,ename,sal from emp where deptno=30;
創(chuàng)建一個empv30里面寫empno,ename,sal
create view emp1 (rn,ename,job,sal) as (select rownum rn,a.* from (select ename,job,sal from emp order by sal) a);
將emp表排序結果存到視圖 emp1中,隨后使用select * from emp1 where rn>4 and rn<11;獲取5-10行
查詢視圖
創(chuàng)建的視圖的查詢方法和正常的表的查詢方法相同即直接使用select語句叶骨。
select * from empv30;
修改視圖
修改視圖主要是通過Oracle創(chuàng)建視圖時候的一個屬性即or replace來重新創(chuàng)建同名視圖來達到修改視圖的效果茫多。
刪除視圖
刪除視圖的方法和正常刪除表的效果相同,通過drop來刪除表忽刽。即 drop view view_name;天揖。
drop view empv30;