Sql Server視圖的概念
在Sql Server數(shù)據(jù)庫中,Sql Server視圖是非常重要的概念,作為查詢所定義的虛擬表,Sql Server視圖在Sql的用途非常廣泛。
Sql Server視圖是由一個(gè)查詢所定義的虛擬表,它與物理表不同的是,視圖中的數(shù)據(jù)沒有物理表現(xiàn)形式,除非你為其創(chuàng)建一個(gè)索引;如果查詢一個(gè)沒有索引的視圖,Sql Server實(shí)際訪問的是基礎(chǔ)表。
如果你要?jiǎng)?chuàng)建一個(gè)Sql Server視圖,為其指定一個(gè)名稱和查詢即可。Sql Server只保存視圖的元數(shù)據(jù),用戶描述這個(gè)對象,以及它所包含的列,安全,依賴等。當(dāng)你查詢視圖時(shí),無論是獲取數(shù)據(jù)還是更新數(shù)據(jù),Sql server都用視圖的定義來訪問基礎(chǔ)表;
Sql Server視圖在我們?nèi)粘2僮饕舶缪葜S多重要的角色,比如可以利用視圖訪問經(jīng)過篩選和處理的數(shù)據(jù),而不是直接訪問基礎(chǔ)表,以及在一定程度上也保護(hù)了基礎(chǔ)表。
我們在創(chuàng)建Sql Server視圖的時(shí)候,也要遵守三個(gè)規(guī)則:
不能在視圖定義中指定ORDER BY ,除非定義中包含Top或For Xml 說明;所有的列必須有列名;這些所有的列名必須唯一; 對于視圖表中在沒有top或for xml說明的情況下,不能有Order by 語句,這是因?yàn)橐晥D被認(rèn)為是一個(gè)表,表是一個(gè)邏輯的實(shí)體,它的行是沒有順序的。視圖中所有列必須有列名,且唯一的情況我想大家都理解;
下面的sql語句表示創(chuàng)建一個(gè)簡單的Sql Server視圖:
- CREATE VIEW dbo.V1
- AS
- SELECT CustomerID,CompanyName FROM Customers
- WHERE EXISTS(SELECT * FROM Orders WHERE Customers.CustomerID = Orders
【編輯推薦】
實(shí)現(xiàn)子孫樹查詢的經(jīng)典SQL語句
詢表的字段名的sql語句寫法