sql之淺談視圖的作用,sql淺談視圖

來源:互聯網
上載者:User

sql之淺談視圖的作用,sql淺談視圖



【資料庫】☆★sql之淺談視圖的作用


    在一個項目的實際開發過程中牽涉到複雜業務的時候,我們不可避免的需要使用中間表來進行資料連線,有的同學就說了,我可以採用Hibernate進行主外鍵進行關聯啊?多對多,多對一,一對一,等,採用主外部索引鍵關聯在資料的操作過程中具有很強的耦合性,尤其對於需要經常刪改資料表而言,我們是不建議採用主外部索引鍵關聯這種模式,那麼,如果我們採用中間表的話,當資料過大在效能上又面臨嚴峻考驗,sql視圖的出現,在解決中間表的商務邏輯上是不錯的選擇。ok,首先我們瞭解什麼是視圖?


    1、視圖是表?沒錯,但是是一張虛擬表,視圖的欄位是由我們自訂的,視圖只供查詢,資料不可更改,查詢資料來源於我們建立的實體表。


    2、使用視圖的優勢?視圖可以將多個複雜關聯表,提取出我們需要的資訊,最佳化查詢速度。


   如何建立視圖?


我們先建立三張表;如下:




這個是典型的一對多和一對一的關係,那麼,假如每張表的資料都在一萬條資料以上,現在查詢在潢高上學的學生姓名?

首先,我們分析一下,在潢高上學?首先是一個高中,那麼我們會有一條Sql where school='潢高',

查詢出一個List,得到gradeids,然後再到grade中根據gradeids查詢這麼多grades對應的studentids,在使用這些studentsid查詢出students迴圈最後得到name?


是不是很累贅?查詢是不是很影響效能?


觀察得知,這三張表每兩張表之間都是通過id進行關聯的,如果我們通過id將三張表組成一張表,是不是很方便?


我們來關聯學校表和年級表:這個年級ID我們不要,ok?


select s.id as schoolId,s.school as schoolName,s.gradeid as gradeid,g.grade as gradeName,g.studentid as studentid from school s,grade g  where s.gradeid=g.id;



那麼我們再關聯上學生表,學生表的id等於年級表的studentid ok?

SELECT s.id as schoolId,s.school as schoolName,s.gradeid as gradeid,g.grade as gradeName,g.studentid as studentid ,t.`name` as studentName,t.age as studentAgefrom school s,grade g,student t where s.gradeid=g.id and  g.studentid=t.id;

ok,到了這裡?我們再看運行結果?



那麼我們想查詢在潢高上學的學生姓名,where schoolName='潢高',擷取的list迴圈得到Object,通過Object.getStudentName,就可以了?


所以需要將查詢到的結果,建立為一張虛擬表,這樣才能操作,通過這個create view 視圖名 as 命令建立:


意思就是將查詢結果建立為名稱為table_sgt的一張虛擬表:

create view table_sgt as(select s.id as schoolId,s.school as schoolName,s.gradeid as gradeid,g.grade as gradeName,g.studentid as studentid ,t.`name` as studentName,t.age as studentAge from school s,grade g,student t where s.gradeid=g.id and  g.studentid=t.id);





    我們在使用視圖的時候,需要把它看做為一張表,建立一張實體表需要做的步驟,視圖也都需要(例如,執行個體化,配置對應檔,對象的屬性get,set方法)


    注意視圖所查詢出來的資料只能進行查看,不能增刪改!


    例子資料庫為Mysql5.5,工具Navicat for MySQL


    ok,有問題請舉手?




sql的視圖作用

看該看的資料 它其實就是一條sql語句 相當於設定許可權

比如一個部門所有員工看工資表 你的領導可以全都看到
他的視圖就是select salary from salary_table;
而員工的視圖就是select salary from salary_table where id=worker_id;
 
sql 中在什情況下使用視圖,有什好處?

視圖是一個虛擬表,其內容由查詢定義。同真實的表一樣,視圖包含一系列帶有名稱的列和行資料。但是,視圖並不在資料庫中以儲存的資料值集形式存在。行和列資料來自由定義視圖的查詢所引用的表,並且在引用視圖時動態產生。對其中所引用的基礎資料表來說,視圖的作用類似於篩選。定義視圖的篩選可以來自當前或其它資料庫的一個或多個表,或者其它視圖視圖是儲存在資料庫中的查詢的SQL 陳述式,它主要出於兩種原因:安全原因, 視圖可以隱藏一些資料,如:社會保險基金錶,可以用視圖只顯示姓名,地址,而不顯示社會保險號和工資數等,另一原因是可使複雜的查詢易於理解和使用。 視圖的作用   * 簡單性。看到的就是需要的。視圖不僅可以簡化使用者對資料的理解,也可以簡化他們的操作。那些被經常使用的查詢可以被定義為視圖,從而使得使用者不必為以後的操作每次指定全部的條件。   * 安全性。通過視圖使用者只能查詢和修改他們所能見到的資料。資料庫中的其它資料則既看不見也取不到。資料庫授權命令可以使每個使用者對資料庫的檢索限制到特定的資料庫物件上,但不能授權到資料庫特定行和特定的列上。通過視圖,使用者可以被限制在資料的不同子集上:   使用許可權可被限制在基表的行的子集上。 使用許可權可被限制在基表的列的子集上。 使用許可權可被限制在基表的行和列的子集上。 使用許可權可被限制在多個基表的串連所限定的行上。 使用許可權可被限制在基表中的資料的統計匯總上。 使用許可權可被限制在另一視圖的一個子集上,或是一些視圖和基表合并後的子集上。   * 邏輯資料獨立性。視圖可協助使用者屏蔽真實表結構變化帶來的影響。
 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.