推薦學習:
檢視的介紹:
檢視的作用:
建立檢視的語法如下:
create [or replace] [algorithm = {undefined | merge | temptable}] view view_name [(column_list)] as select_statement [with [cascaded | local] check option]
引數說明:
修改檢視是指修改資料庫中已存在的表的定義。當基本表中的某些欄位發生改變時,可以通過修改檢視來保持檢視和基本表之間的一致。
語法格式:
alter view 檢視名 as select語句;
並不是所有的檢視都可以更新。可以在UPDATE、DELETE或INSERT等語句中使用檢視,以更新基本表的內容。對於可更新的檢視,在檢視中的行和基本表中的行之間必須具有一對一的關係,如果檢視包含下述結構中的任何一種,則該檢視不可更新:
聚合函數(SUM()、MIN()、MAX()等);
DISTINCT;
HAVING;
UNION或者UNION ALL;
位於選擇列表中的子查詢;
JOIN;
FROM子句中的不可更新檢視;
WHERE子句中的子查詢,參照FROM子句中的表;
僅使用文字值(在該情況下,沒有要更新的基本表)。
注意:
檢視中雖然可以更新資料,但是有很多限制。一般情況下,最好將檢視作為查詢資料的虛擬表,而不要通過檢視更新資料。
當真實表中修改了某個存在檢視中的欄位時,檢視需要更新,否則該檢視就會變成無效檢視!
重新命名檢視:
rename table 檢視名 to 新檢視名;
刪除檢視:
drop view if exists 檢視名;
刪除檢視時,只刪除了檢視的定義,而並不會刪除真實表中的資料
如果想同時刪除多個檢視,則使用下面的語法格式:
drop view if exists 檢視名1, 檢視名2, 檢視名3...;
在進行練習時可以先根據下面程式碼建立用於練習的兩個基本表:
create table college( cno int null, cname varchar(20) null);
create table student( sid int null, name varchar(20) null, gender varchar(20) null, age int null, birth date null, address varchar(20) null, score double null);
兩表的基本資料如下圖所示:
結合之前學過的知識可以 嘗試使用子查詢和連線查詢 來實現,參考程式碼如下:
SELECT cname FROM (SELECT cname, rank() over (order by avg_score desc ) item FROM (SELECT cname, avg(score) avg_score FROM student JOIN college ON sid = cno GROUP BY cname) t) tt WHERE item = 1;
在上述程式碼中,先將student 與 college兩表關聯,將關聯的查詢作為子表,並根據子表進行平均數的排序,平均數序號為1的平均分數最高,再以此為子表進行子查詢,查詢出了平均分最高的學校。具體結果如下:
這種方式雖然能夠解決問題,但是相對複雜,不容易看懂,為了簡化程式碼,我們可以將每一個子查詢建立為一個檢視
檢視解決方式程式碼:
-- 1 檢視一,連線兩表並計算平均數 CREATE VIEW t_view AS SELECT cname, avg(score) avg_score FROM student JOIN college ON sid = cno GROUP BY cname; -- 2 檢視二,利用檢視一對平均分數進行排序標號 CREATE VIEW tt_view AS SELECT cname, rank() over (order by avg_score desc ) item FROM (t_view); -- 3 利用檢視查詢 SELECT cname FROM (tt_view) WHERE item = 1;
在建立完檢視後,如果想要查詢平均分前三名學校,則方便很多,建立好的檢視可以直接使用!
參考程式碼及結果:
SELECT cnameFROM (tt_view)WHERE item = 1 OR item = 2 OR item = 3;
推薦學習:
以上就是範例詳解MySQL資料庫檢視的詳細內容,更多請關注TW511.COM其它相關文章!