程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> Oracle中創建視圖教程學習,oracle創建視圖教程

Oracle中創建視圖教程學習,oracle創建視圖教程

編輯:Oracle教程

Oracle中創建視圖教程學習,oracle創建視圖教程


分享下oracle數據庫中創建視圖的方法。

Oracle的數據庫對象分為五種:表,視圖,序列,索引和同義詞。

視圖是基於一個表或多個表或視圖的邏輯表,本身不包含數據,通過它可以對表裡面的數據進行查詢和修改。視圖基於的表稱為基表。

視圖是存儲在數據字典裡的一條select語句。 通過創建視圖可以提取數據的邏輯上的集合或組合。

oracle視圖的優點:

1.對數據庫的訪問,因為視圖可以有選擇性的選取數據庫裡的一部分。

2.用戶通過簡單的查詢可以從復雜查詢中得到結果。

3.維護數據的獨立性,試圖可從多個表檢索數據。

4.對於相同的數據可產生不同的視圖。

視圖分為簡單視圖和復雜視圖:

簡單視圖只從單表裡獲取數據
復雜視圖從多表

簡單視圖不包含函數和數據組
復雜視圖包含

簡單視圖可以實現DML操作
復雜視圖不可以.

oracle創建視圖的語句:

CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view_name

[(alias[, alias]...)]

AS subquery
[WITH CHECK OPTION [CONSTRAINT constraint]]
[WITH READ ONLY]
其中:
OR REPLACE :若所創建的視圖已經存在,ORACLE自動重建該視圖;
FORCE :不管基表是否存在ORACLE都會自動創建該視圖;
NOFORCE :只有基表都存在ORACLE才會創建該視圖:
alias :為視圖產生的列定義的別名;
subquery :一條完整的SELECT語句,可以在該語句中定義別名;
WITH CHECK OPTION :
插入或修改的數據行必須滿足視圖定義的約束;
WITH READ ONLY :
該視圖上不能進行任何DML操作。
例如:www.jbxue.com
CREATE OR REPLACE VIEW dept_sum_vw
(name,minsal,maxsal,avgsal)
AS SELECT d.dname,min(e.sal),max(e.sal),avg(e.sal)
FROM emp e,dept d
WHERE e.deptno=d.deptno
GROUP BY d.dname;

視圖的定義原則:
1.視圖的查詢可以使用復雜的SELECT語法,包括連接/分組查詢和子查詢;
2.在沒有WITH CHECK OPTION和 READ ONLY 的情況下,查詢中不能使用
ORDER BY 子句;
3.如果沒有為CHECK OPTION約束命名,系統會自動為之命名,形式為SYS_Cn;
4.OR REPLACE選項可以不刪除原視圖便可更改其定義並重建,或重新授予對象
權限。

視圖的查詢:
視圖創建成功後,可以從視圖中檢索數據,這點和從表中檢索數據一樣。
還可以查詢視圖的全部信息和指定的數據行和列。
如:

檢索數據:
SQL>SELECT * FROM dept_sum_vw;

查詢視圖定義:
SELECT view_name,text from user_views;
其中text顯示的內容為視圖定義的SELECT語句,可通過DESC USER_VIEWS
得到相關信息。

修改視圖:
通過OR REPLACE 重新創建同名視圖即可。

視圖上的DML 操作:
DML操作應遵循的原則:
1.簡單視圖可以執行DML操作;
2.在視圖包含GROUP 函數,GROUP BY子句,DISTINCT關鍵字時不能
刪除數據行;
3.在視圖不出現下列情況時可通過視圖修改基表數據或插入數據:
a.視圖中包含GROUP 函數,GROUP BY子句,DISTINCT關鍵字;
b.使用表達式定義的列;
c.ROWNUM偽列。
d.基表中未在視圖中選擇的其他列定義為非空且無默認值。


視圖可用於保持數據庫的完整性,但作用有限。
通過視圖執行引用完整性約束可在數據庫級執行約束。

WITH CHECK OPTION 子句限定:
通過視圖執行的INSERTS和UPDATES操作不能創建該視圖檢索不到的數據行,
因為它會對插入或修改的數據行執行完整性約束和數據有效性檢查。
例如:
CREATE OR REPLACE VIEW vw_emp20
AS SELECT * FROM emp
WHERE deptno=20
WITH CHECK OPTION constraint vw_emp20_ck;
視圖 已建立。

查詢結果:
SELECT empno,ename,job FROM vw_emp20;

EMPNO ENAME JOB
--------------------- -------------- -------------
7369 SMITH CLERK
7566 JONES MANAGER
7902 FORD ANALYST

修改:
UPDATE vw_emp20
SET deptno=20
WHERE empno=7902;
將產生錯誤:
UPDATE vw_emp20
*
ERROR 位於第一行:
ORA-01402:視圖WITH CHECK OPTION 違反WHERE 子句

視圖的刪除:
DROP VIEW VIEW_NAME語句刪除視圖。
刪除視圖的定義不影響基表中的數據。
只有視圖所有者和具備DROP VIEW權限的用戶可以刪除視圖。
視圖被刪除後,基於被刪除視圖的其他視圖或應用將無效。


oracle怎創建視圖

1create view V_StudInfoasselect a.學號,a.姓名,b.課程號,b.課程名,case when c.成績 between 90 and 100 then '優'when c.成績 between 80 and 89 then '良'when c.成績 between 70 and 79 then '中'when c.成績 between 60 and 69 then '及格'else '不及格' end 成績等級from 學生表 a,課程表 b, 成績表 c where a.學號=c.學號and b.課程號=c.課程號 2create view V_Studasselect a.學號,a.姓名,count(*) 所修科目數,avg(成績) 平均成績from 學生表 a,課程表 b, 成績表 c where a.學號=c.學號and b.課程號=c.課程號and a.學號 in(select a.學號from 學生表 a,課程表 b, 成績表 c where a.學號=c.學號and b.課程號=c.課程號 and b.課程名='英語' and c.成績>75)
表名和字段名,自己跟你實際的核對一下,不同的改一下

 

oracle創建視圖

CREATE or REPLACE view view_will as
select college.collegeid,mat.stuid,sum(score.chinese+score.math+score.english+score.complex)
from college,mat,score
where college.collegeid=mat.first_will and mat.stuid=score.stuid
group by SCORE.STUID,COLLEGE.COLLEGEID,MAT.STUID having
sum(score.chinese+score.math+score.english+score.complex)>500
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved