SQL Server視圖的功能有哪些?
以下的文章主要向大家描述的是SQL Server視圖的功能,前段時間作項(xiàng)目中,SQL Server視圖在實(shí)際操作中會有一些實(shí)際使用的問題,在以前的工作視圖是很少遇到的,認(rèn)為直接用表就ok了,何須視圖呢?下面我來講述一下它的功用。
以往當(dāng)我們查詢數(shù)據(jù)時,一定要很認(rèn)真的地從設(shè)計(jì)select語句開始,將需要查詢的每個字段寫在sql語句里,
前段時間作項(xiàng)目中,遇到使用SQL Server視圖的問題,以前的工作中很少遇到視圖,認(rèn)為直接用表就ok了,何須視圖呢?下面我來講述一下它的功用:以往當(dāng)我們查詢數(shù)據(jù)時,一定要很認(rèn)真的地從設(shè)計(jì)select語句開始,將需要查詢的每個字段寫在sql語句里,每次你要以同樣的條件來查詢數(shù)據(jù)時,那么每次都要重復(fù)輸入相同的查詢語句,效率很低。
若將這個經(jīng)常要重復(fù)使用的查詢語句創(chuàng)建成視圖,就不用那么麻煩了!直接用select * from 視圖名 就行了,其實(shí)將查詢語句創(chuàng)建成SQL Server視圖,不僅僅是簡化查詢的動作;更重要的是,視圖具備數(shù)據(jù)表的特性,還可以衍生出更多的應(yīng)用。
所謂視圖(View)其實(shí)是執(zhí)行查詢語句后得到的結(jié)果,但這個查詢結(jié)果可以仿真成數(shù)據(jù)表來使用,所以有人也稱它為“虛擬數(shù)據(jù)表”,視圖在操作上和數(shù)據(jù)表沒有什么區(qū)別,但兩者的差異是其本質(zhì)是不同的:
數(shù)據(jù)表是實(shí)際存儲記錄的地方,然而視圖并不保存任何記錄,它存儲的實(shí)際上是查詢語句,其所呈現(xiàn)出來的記錄實(shí)際來自于數(shù)據(jù)表,可以為多張數(shù)據(jù)表,大家由此可以預(yù)見到視圖應(yīng)用的彈性!我們可以依據(jù)各種查詢需要創(chuàng)建不同視圖,但不會因此而增加數(shù)據(jù)庫的數(shù)據(jù)量。
下面總結(jié)視圖的幾大優(yōu)點(diǎn):1.增強(qiáng)可讀性 2.數(shù)據(jù)安全及保密:針對不同用戶,可以創(chuàng)建不同視圖,限制其所能瀏覽和編輯的數(shù)據(jù)內(nèi)容。3.降低查詢復(fù)雜度 4.方便維護(hù)。
總之,善于運(yùn)用視圖可以讓數(shù)據(jù)庫的設(shè)計(jì)、管理及使用都更加有效率、更加方便。
視圖可以被看成是虛擬表或存儲查詢??赏ㄟ^視圖訪問的數(shù)據(jù)不作為獨(dú)特的對象存儲在數(shù)據(jù)庫內(nèi)。數(shù)據(jù)庫內(nèi)存儲的是 SELECT 語句。SELECT 語句的結(jié)果集構(gòu)成視圖所返回的虛擬表。用戶可以用引用表時所使用的方法,在 Transact-SQL 語句中通過引用視圖名稱來使用虛擬表。使用SQL Server視圖可以實(shí)現(xiàn)下列任一或所有功能:
ps:leeenx的見解是,因?yàn)橐晥D存儲的是語句,所以在使用視圖時,運(yùn)行的速度跟使用數(shù)據(jù)表是一樣的(嚴(yán)格上說應(yīng)該會慢一些,因?yàn)橐葓?zhí)行sql語句再生成表)
將用戶限定在表中的特定行上。
例如,只允許雇員看見工作跟蹤表內(nèi)記錄其工作的行。
將用戶限定在特定列上。
例如,對于那些不負(fù)責(zé)處理工資單的雇員,只允許他們看見雇員表中的姓名列、辦公室列、工作電話列和部門列,而不能看見任何包含工資信息或個人信息的列。
將多個表中的列聯(lián)接起來,使它們看起來象一個表。
聚合信息而非提供詳細(xì)信息。
例如,顯示一個列的和,或列的最大值和最小值。
通過定義 SELECT 語句以檢索將在視圖中顯示的數(shù)據(jù)來創(chuàng)建視圖。SELECT 語句引用的數(shù)據(jù)表稱為視圖的基表。在下例中,pubs 數(shù)據(jù)庫中的 titleview 是一個視圖,該視圖選擇三個基表中的數(shù)據(jù)來顯示包含常用數(shù)據(jù)的虛擬表:
- CREATE VIEW titleview
- AS
- SELECT title, au_ord, au_lname, price, ytd_sales, pub_id
- FROM authors AS a
- JOIN titleauthor AS ta ON (a.au_id = ta.au_id)
- JOIN titles AS t ON (t.title_id = ta.title_id)
之后,可以用引用表時所使用的方法在語句中引用 titleview。
- SELECT *
- FROM titleview
一個視圖可以引用另一個SQL Server視圖。例如,titleview 顯示的信息對管理人員很有用,但公司通常只在季度或年度財(cái)務(wù)報(bào)表中才公布本年度截止到現(xiàn)在的財(cái)政數(shù)字??梢越⒁粋€視圖,在其中包含除 au_ord 和 ytd_sales 外的所有 titleview 列。使用這個新視圖,客戶可以獲得已上市的書籍列表而不會看到財(cái)務(wù)信息:
- CREATE VIEW Cust_titleview
- AS
- SELECT title, au_lname, price, pub_id
- FROM titleview
視圖可用于在多個數(shù)據(jù)庫或 Microsoft® SQL Server™ 2000 實(shí)例間對數(shù)據(jù)進(jìn)行分區(qū)。分區(qū)視圖可用于在整個服務(wù)器組內(nèi)分布數(shù)據(jù)庫處理。服務(wù)器組具有與服務(wù)器聚集相同的性能優(yōu)點(diǎn),并可用于支持最大的 Web 站點(diǎn)或公司數(shù)據(jù)中心的處理需求。
原始表被細(xì)分為多個成員表,每個成員表包含原始表的行子集。每個成員表可放置在不同服務(wù)器的數(shù)據(jù)庫中。每個服務(wù)器也可得到分區(qū)視圖。分區(qū)視圖使用 Transact-SQL UNION 運(yùn)算符,將在所有成員表上選擇的結(jié)果合并為單個結(jié)果集,該結(jié)果集的行為與整個原始表的復(fù)本完全一樣。例如在三個服務(wù)器間進(jìn)行表分區(qū)。在第一個服務(wù)器上定義如下的分區(qū)視圖:
- CREATE VIEW PartitionedView AS
- SELECT *
- FROM MyDatabase.dbo.PartitionTable1
- UNION ALL
- SELECT *
- FROM Server2.MyDatabase.dbo.PartitionTable2
- UNION ALL
- SELECT *
- FROM Server3.MyDatabase.dbo.PartitionTable3
在其它兩個服務(wù)器上定義類似的分區(qū)視圖。利用這三個視圖,三個服務(wù)器上任何引用 PartitionedView 的 Transact-SQL 語句都將看到與原始表中相同的行為。似乎每個服務(wù)器上都存在原始表的復(fù)本一樣,而實(shí)際上每個表只有一個成員表和分區(qū)SQL Server視圖。有關(guān)更多信息,請參見視圖使用方案。
只要所做的修改只影響視圖所引用的其中一個基表,就可以更新所有 SQL Server 版本內(nèi)的視圖(可以對其執(zhí)行 UPDATE、DELETE 或 INSERT 語句)。
- -- Increase the prices for publisher '0736' by 10%.
- UPDATE titleview
- SET priceprice = price * 1.10
- WHERE pub_id = '0736'
- GO
SQL Server 2000 支持可引用視圖的更復(fù)雜的 INSERT、UPDATE 和 DELETE 語句??稍谝晥D上定義 INSTEAD OF 觸發(fā)器,指定必須對基表執(zhí)行的個別更新以支持 INSERT、UPDATE 或 DELETE 語句。另外,分區(qū)視圖還支持 INSERT、UDPATE 和 DELETE 語句修改視圖所引用的多個成員表。
索引視圖是 SQL Server 2000 具有的功能,可顯著提高復(fù)雜視圖類型的性能,這些視圖類型通常在數(shù)據(jù)倉庫或其它決策支持系統(tǒng)中出現(xiàn)。
視圖的結(jié)果集通常不保存在數(shù)據(jù)庫中,因此視圖也稱為虛擬表。SQL Server視圖的結(jié)果集動態(tài)包含在語句邏輯中并在運(yùn)行時動態(tài)生成。有關(guān)更多信息,請參見視圖解析。
復(fù)雜的查詢(如決策支持系統(tǒng)中的查詢)可引用基表中的大量行,并將大量信息聚積在相對較簡潔的聚合中,如總和或平均值。SQL Server 2000 支持在執(zhí)行此類復(fù)雜查詢的視圖上創(chuàng)建聚集索引。當(dāng)執(zhí)行 CREATE INDEX 語句時,視圖 SELECT 的結(jié)果集將永久存儲在數(shù)據(jù)庫中。SQL 語句此后若引用該視圖,響應(yīng)時間將會顯著縮短。對基本數(shù)據(jù)的修改將自動反映在視圖中。
SQL Server 2000 CREATE VIEW 語句支持 SCHEMABINDING 選項(xiàng),以防止視圖所引用的表在視圖未被調(diào)整的情況下發(fā)生改變。必須為任何創(chuàng)建索引的視圖指定 SCHEMABINDING。
【編輯推薦】
- 批量修改SQL Server 2005表構(gòu)架很簡單!
- SQL Server 日期操作全接觸,嘻嘻
- SQL Server 易混淆的一些數(shù)據(jù)類型有哪些?
- SQL Server數(shù)據(jù)整理的操作方案描述
- SQL Server group by的用法有很多