溫馨提示×

溫馨提示×

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

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

Oracle系列:(22)視圖

發(fā)布時(shí)間:2020-07-26 13:48:02 來源:網(wǎng)絡(luò) 閱讀:312 作者:lsieun 欄目:關(guān)系型數(shù)據(jù)庫



什么是視圖【View】 

(1)視圖是一種虛表 

(2)視圖建立在已有表的基礎(chǔ)上, 視圖賴以建立的這些表稱為基表

(3)向視圖提供數(shù)據(jù)內(nèi)容的語句為 SELECT 語句,可以將視圖理解為存儲起來的 SELECT 語句

(4)視圖向用戶提供基表數(shù)據(jù)的另一種表現(xiàn)形式

(5)視圖沒有存儲真正的數(shù)據(jù),真正的數(shù)據(jù)還是存儲在基表中

(6)程序員雖然操作的是視圖,但最終視圖還會轉(zhuǎn)成操作基表

(7)一個(gè)基表可以有0個(gè)或多個(gè)視圖 


什么情況下會用到視圖

(1)如果你不想讓用戶看到所有數(shù)據(jù)(字段,記錄),只想讓用戶看到某些的數(shù)據(jù)時(shí),此時(shí)可以使用視圖

(2)當(dāng)你需要減化SQL查詢語句的編寫時(shí),可以使用視圖,但不提高查詢效率


視圖應(yīng)用領(lǐng)域

(1)銀行,電信,金屬,證券軍事等不便讓用戶知道所有數(shù)據(jù)的項(xiàng)目中


視圖的作用

(1)限制數(shù)據(jù)訪問

(2)簡化復(fù)雜查詢

(3)提供數(shù)據(jù)的相互獨(dú)立

(4)同樣的數(shù)據(jù),可以有不同的顯示方式


基于emp表所有列,創(chuàng)建視圖emp_view_1,

create view 視圖名 as select對一張或多張基表的查詢
create view emp_view_1
as
select * from emp;

Oracle系列:(22)視圖


默認(rèn)情況下,普通用戶無權(quán)創(chuàng)建視圖,得讓sysdba為你分配creare view的權(quán)限 


以sysdba身份,授權(quán)scott用戶create view權(quán)限

grant create view to scott;


以sysdba身份,撤銷scott用戶create view權(quán)限

revoke create view from scott;


基于emp表指定列,創(chuàng)建視圖emp_view_2,該視圖包含編號/姓名/工資/年薪/年收入(查詢中使用列別名)

create view emp_view_2
as
select empno "編號",ename "姓名",sal "工資",sal*12 "年薪",sal*12+NVL(comm,0) "年收入"
from emp;


基于emp表指定列,創(chuàng)建視圖emp_view_3(a,b,c,d,e),包含編號/姓名/工資/年薪/年收入(視圖中使用列名)

create view emp_view_3(a,b,c,d,e)
as
select empno "編號",ename "姓名",sal "工資",sal*12 "年薪",sal*12+NVL(comm,0) "年收入"
from emp;

Oracle系列:(22)視圖


查詢emp_view_3創(chuàng)建視圖的結(jié)構(gòu)

desc emp_view_3;

Oracle系列:(22)視圖


修改emp_view_3(id,name,salary,annual,income)視圖,

create or replace view 視圖名 as 子查詢
create or replace view emp_view_3(id,name,salary,annual,income)
as
select empno "編號",ename "姓名",sal "工資",sal*12 "年薪",sal*12+NVL(comm,0) "年收入"
from emp;

Oracle系列:(22)視圖


查詢emp表,求出各部門的最低工資,最高工資,平均工資

select min(sal),max(sal),round(avg(sal),0),deptno
from emp
group by deptno;


創(chuàng)建視圖emp_view_4,視圖中包含各部門的最低工資,最高工資,平均工資

create or replace view emp_view_4
as
select deptno "部門號",min(sal) "最低工資",max(sal) "最高工資",round(avg(sal),0) "平均工資"
from emp
group by deptno;

Oracle系列:(22)視圖


創(chuàng)建視圖emp_view_5,視圖中包含員工編號,姓名,工資,部門名,工資等級

create or replace view emp_view_5
as
select e.empno "編號",e.ename "姓名",e.sal "工資",d.dname "部門名",s.grade "工資等級"
from emp e,dept d,salgrade s
where (e.deptno=d.deptno) and (e.sal between s.losal and s.hisal);



刪除視圖emp_view_1中的7788號員工的記錄,使用delete操作,會影響基表嗎

delete from emp_view_1 where empno=7788;

寫法正確,會影響基表


修改emp_view_1為只讀視圖【with read only】,再執(zhí)行上述delete操作,還行嗎?

create or replace view emp_view_1
as
select * from emp
with read only;

不能進(jìn)行delete操作了

Oracle系列:(22)視圖


將【整個(gè)】視圖刪除,會影響表嗎?

不會影響基表


刪除視圖,會進(jìn)入回收站嗎?

不會進(jìn)入回收站

Oracle系列:(22)視圖


刪除基表會影響視圖嗎?

會影響視圖


閃回基表后,視圖有影響嗎?

視圖又可以正常工作了








向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI