基于表或其他視圖來創建視圖,目的將一些復雜的查詢簡化,提高查詢速度 。如:
創新互聯專注為客戶提供全方位的互聯網綜合服務,包含不限于成都網站設計、成都網站建設、烈山網絡推廣、重慶小程序開發公司、烈山網絡營銷、烈山企業策劃、烈山品牌公關、搜索引擎seo、人物專訪、企業宣傳片、企業代運營等,從售前售中售后,我們都將竭誠為您服務,您的肯定,是我們最大的嘉獎;創新互聯為所有大學生創業者提供烈山建站搭建服務,24小時服務熱線:13518219792,官方網址:www.cdcxhl.com
CREATE VIEW v_name AS SELECT b.dname,a.ename FROM emp a,dept b
WHERE a.deptno=b.deptno ;
查詢部門名和員工名 通過建立視圖,v_name 視圖就等同于SELECT b.dname,a.ename FROM emp a,dept b
WHERE a.deptno=b.deptno 這樣可以大大的簡化程序
1、視圖(View)創建使用,視圖(View)實際上是一張或者多張表上的預定義查詢,這些表稱為基表。從視圖中查詢信息與從表中查詢信息的方法完全相同。只需要簡單的SELECT?FROM即可。
2、OR REPLACE:如果視圖已經存在,則替換舊視圖。
3、FORCE:即使基表不存在,也可以創建該視圖,但是該視圖不能正常使用,當基表創建成功后,視圖才能正常使用。
4、NOFORCE:如果基表不存在,無法創建視圖,該項是默認選項。
5、 WITH READ ONLY:默認可以通過視圖對基表執行增刪改操作,但是有很多在基表上的限制(比如:基表中某列不能為空,但是該列沒有出現在視圖中,則不能通過視圖執行insert操作),WITH READ ONLY說明視圖是只讀視圖,不能通過該視圖進行增刪改操作。現實開發中,基本上不通過視圖對表中的數據進行增刪改操作。
視圖具有以下優點:可以限制用戶只能通過視圖檢索數據。這樣就可以對最終用戶屏蔽建表時底層的基表。可以將復雜的查詢保存為視圖。可以對最終用戶屏蔽一定的復雜性。 限制某個視圖只能訪問基表中的部分列或者部分行的特定數據。這樣可以實現一定的安全性。從多張基表中按一定的業務邏輯抽出用戶關心的部分,形成一張虛擬表。
create
or
replace
view
視圖名
as
...;
基本的創建命令:
比如:創建表book的一張視圖
create
or
replace
view_book
as
select
*
from
book
where
book_id
='001';
使用視圖,就用select
*
from
view_book;
當然了,使用
圖形化界面
更方便。
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操作。
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;
--給用戶授權創建視圖
-- grant create all view to zdgshr; 所有數據庫都能創建視圖的用戶
grant create view to zdgshr;
--創建簡單視圖
create view temp
as
select * from zd_member_basic_info;
--測試
select * from temp where rownum=1;
--創建簡單視圖:只讀
create or replace view temp1
as
select id,job_number,name,dept_id from zd_member_basic_info
with read only;
--測試
insert into temp1(id,job_number,name,dept_id) values(1,0,'張三',1300);
視圖的刪除:
DROP VIEW VIEW_NAME語句刪除視圖。
刪除視圖的定義不影響基表中的數據。
只有視圖所有者和具備DROP VIEW權限的用戶可以刪除視圖。
視圖被刪除后,基于被刪除視圖的其他視圖或應用將無效。
四、視圖分為簡單視圖和復雜視圖。
簡單視圖只從單表里獲取數據;復雜視圖從多表里獲取數據。
簡單視圖不包含函數和數據組;復雜視圖包含函數和數據組。
簡單視圖可以實現DML操作;復雜視圖不可以。
create or replace view temp1
as
select distinct name,job_number,dept_id from zd_member_basic_info
with read only;
delete from zd_member_basic_info where name='而過';
create or replace view temp
as
select * from zd_member_basic_info order by name;