SQL干貨篇三
創(chuàng)建視圖
create view <視圖名>[(列名),(列名)...] as <子查詢> [with check option]
- 子查詢可以是select語句或者包含order by子句院领,具體情況而定蓖捶,視圖名是一定要有的别凹,列名可以省略,如果省略的話則是由子查詢中的目標列的相關字段組成纲仍,當然也可以自己指定,with check option表示如果視圖或者參照表執(zhí)行insert,update,delete時洛口,那么視圖或者參照表會隨著變化策精,也就是兩個綁定在一起的意思,當然也可以選擇不用莱革,那么視圖的增刪改就和參照表沒有關系了
實例
建立在一個表上
create view IS_student as select Sno,Sname,Sage where Sdept='IS'
with check option ; /*將所有的IS系的學生學號建立一個視圖IS_student,其中的列名是Sno,Sname,Sage*/
建立在多個表上
create view IS_Grade(Sno,Sname,Grade)
as select student.Sno,Sname,Grade from student,SC
where Sdept='IS' and student.Sno=SC.Sno; /*建立在兩個表上的視圖峻堰,可以看出這里已經(jīng)指出指定的列名,但是這個列名并不是固定的盅视,可以根據(jù)具體的含義來指定*/
定義一個帶有表達式的視圖
create view BT_S(Sno,Sname,Sbirth)
as select Sno,Sname,2014-Sage from student /*這里的2014-Sage是用來計算出生日期的*/
with check option;
聚集函數(shù)的視圖
create view BT(Sno,Gavg)
as select Sno,AVG(Grade) from SC Group by Sno; /*這里的AVG(Grade)是用來計算平均成績的捐名,Group by是用來根據(jù)學號分組,這里就是求同一個人的多門學科的平均成績*/
刪除視圖
Drop view <視圖名><CASCADE]
,這里的CASCADE表示如果還導出了其他的視圖闹击,那么加上CASCADE就會全部刪除
實例
Drop view IS_Sdept;
刪除視圖Drop view IS_Sdept CASCADE;
刪除視圖和其導出視圖
查詢視圖
查詢視圖和查詢表是一樣的镶蹋,請參照我前兩章講的SQL語法
更新視圖
視圖的更新包括insert,delete,update,這個和基本表的操作是一樣的
注意:
- 并不是所有的視圖都可以更新的,比如上面根據(jù)學生多科平均成績建立的視圖,這里如果將視圖中的平均成績更新了赏半,那么參照表的數(shù)據(jù)就不能對應的更新了贺归,這就會不允許更新,當然這是在添加了
with check option
語句的情況下- 如果添加了
with check option
語句,那么對視圖的更新就會對應轉(zhuǎn)換成對基本表的更新- 各個系統(tǒng)對視圖的更新還有進一步的規(guī)定断箫,比如DB2規(guī)定:
- 如果視圖是由兩個以上的基本表導出拂酣,那么就不可以更新
- 如果視圖來自字段或者表達式,那么就不允許對此視圖執(zhí)行
insert
,update
,但是可以執(zhí)行delete
- 如果定義中有order by子句仲义,那么不可以更新視圖