視圖sql

視圖sql

通過定義 SELECT 語句以檢索將在視圖中顯示的數據來創建視圖。SELECT 語句引用的數據表稱為視圖的基表。在SQL Server 2005系統中,可以把視圖分為3種類型,即標準視圖,索引視圖和分區視圖。 視圖可以被看成是虛擬表或存儲查詢。可通過視圖訪問的數據不作為獨特的對象存儲在資料庫內。資料庫記憶體儲的是 SELECT 語句。SELECT 語句的結果集構成視圖所返回的虛擬表。用戶可以用引用表時所使用的方法,在 Transact-SQL 語句中通過引用視圖名稱來使用虛擬表。

基本介紹

  • 中文名:資料庫
  • 外文名:SQL SERVER
定義,索引視圖,注意事項,功能,基本項,拓展項,優缺點,優點,缺點,

定義

索引視圖

在下例中,pubs 資料庫中的 titleview 是一個視圖,該視圖選擇三個基表中的數據來顯示包含常用數據的虛擬表:
CREATE VIEW titleview
AS
SELECT title, au_ord, au_lname, price, ytd_sales, pub_id
FROM authors AS a
JOIN titleauthor AS ta ON
JOIN titles AS t ON (t.title_id = ta.title_id)
之後,可以用引用表時所使用的方法在語句中引用 titleview。
SELECT *
FROM titleview

注意事項

1,在索引視圖中,不能使用*號,必具指定所有結果集中的列名。
2,在索引視圖中,所有用到的表前都必須加表所屬的架構dbo。
3,在索引視圖中不能有重複的列(其實在普通視圖中也有該限制)
4,在索引視圖中只能創建唯一聚集索引

功能

基本項

使用SQL視圖可以實現下列任一或所有功能:
1,將用戶限定在表中的特定行上。
例如,只允許雇員看見工作跟蹤表內記錄其工作的行。
2,將用戶限定在特定列上。
例如,對於那些不負責處理工資單的雇員,只允許他們看見雇員表中的姓名列、辦公室列、工作電話列、郵件列和部門列,而不能看見任何包含工資信息或個人信息的列。
3,將多個表中的列聯接起來,使它們看起來象一個表。
4,聚合信息而非提供詳細信息。
例如,顯示一個列的和,或列的最大值和最小值。

拓展項

一個視圖可以引用另一個視圖。例如,titleview 顯示的信息對管理人員很有用,但公司通常只在季度或年度財務報表中才公布本年度截止到現在的財政數字。可以建立一個視圖,在其中包含除 au_ord 和 ytd_sales 外的所有 titleview 列。使用這個新視圖,客戶可以獲得已上市的書籍列表而不會看到財務信息:
CREATE VIEW Cust_titleview
AS
SELECT title, au_lname, price, pub_id
FROM titleview
視圖可用於在多個資料庫或 Microsoft® SQL Server™ 2000 實例間對數據進行分區。分區視圖可用於在整個伺服器組內分布資料庫處理。伺服器組具有與伺服器聚集相同的性能優點,並可用於支持最大的 Web 站點或公司數據中心的處理需求。原始表被細分為多個成員表,每個成員表包含原始表的行子集。每個成員表可放置在不同伺服器的資料庫中。每個伺服器也可得到分區視圖。分區視圖使用Transact-SQLUNION 運算符,將在所有成員表上選擇的結果合併為單個結果集,該結果集的行為與整個原始表的複本完全一樣。例如在三個伺服器間進行表分區。在第一個伺服器上定義如下的分區視圖:
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
在其它兩個伺服器上定義類似的分區視圖。利用這三個視圖,三個伺服器上任何引用 PartitionedView 的 Transact-SQL 語句都將看到與原始表中相同的行為。似乎每個伺服器上都存在原始表的複本一樣,而實際上每個表只有一個成員表和分區視圖。有關更多信息,請參見視圖使用方案。
只要所做的修改只影響視圖所引用的其中一個基表,就可以更新所有 SQL Server 版本內的視圖(可以對其執行 UPDATE、DELETE 或 INSERT 語句)。
-- Increase the prices for publisher '0736' by 10%.
UPDATE titleview
SET price = price * 1.10
WHERE pub_id = '0736'
GO
SQL Server 2000 支持可引用視圖的更複雜的 INSERT、UPDATE 和 DELETE 語句。可在視圖上定義 INSTEAD OF 觸發器,指定必須對基表執行的個別更新以支持 INSERT、UPDATE 或 DELETE 語句。另外,分區視圖還支持 INSERT、UDPATE 和 DELETE 語句修改視圖所引用的多個成員表。
索引視圖是 SQL Server 2000 具有的功能,可顯著提高複雜視圖類型的性能,這些視圖類型通常在數據倉庫或其它決策支持系統中出現。
視圖的結果集通常不保存在資料庫中,因此視圖也稱為虛擬表。視圖的結果集動態包含在語句邏輯中並在運行時動態生成。有關更多信息,請參見視圖解析。
複雜的查詢(如決策支持系統中的查詢)可引用基表中的大量行,並將大量信息聚積在相對較簡潔的聚合中,如總和或平均值。SQL Server 2000 支持在執行此類複雜查詢的視圖上創建聚集索引。當執行 CREATE INDEX 語句時,視圖 SELECT 的結果集將永久存儲在資料庫中。SQL 語句此後若引用該視圖,回響時間將會顯著縮短。對基本數據的修改將自動反映在視圖中。
SQL Server 2000 CREATE VIEW 語句支持 SCHEMABINDING 選項,以防止視圖所引用的表在視圖未被調整的情況下發生改變。必須為任何創建索引的視圖指定 SCHEMABINDING。

優缺點

優點

一,視圖著重於特定數據。
視圖可以讓用戶或者程式開發人員只看到他們所需要的數據,而不需要把表中的所有信息與欄位暴露出來,這樣增強了數據的安全性。
二,簡化數據的操作,易維護。
我們可以將經常用到的多表聯合查詢出來的數據,或特定的結果集定義為視圖,這樣就起到了模組化數據的作用。我們在使用這些數據時直接查詢該視圖就可以,而不用到處寫長長的SQL語句,這樣也起到易維護的作用。
三,視圖可以限定查詢數據。
比如:對於不同的用戶,我們只提供部分數據給他。這樣,我們就可以在視圖中限定結果集,然後返回該視圖給他。這樣,無論用戶怎么對視圖定義查詢條件,他也不能查詢出我們不想提供給他的數據。

缺點

雖然視圖可以給我們帶來種種便利,但不意味著我們就可以濫用它。因為視圖其實就是一段SQL語句,所以它的結果都是每次調用時動態生成的。如果不合理的定義視圖,必然帶來性能上的損耗。
下面是我們在創建視圖應該要注意的幾點:
一,操作視圖會比直接操作基礎表要慢,所以我們儘量避免在大型表上創建視圖。
二,儘量不要創建嵌套視圖,就是在視圖中使用視圖。 這樣在查詢時,會多次重複訪問基礎表,帶來性能損耗。
三,儘量在視圖只返回所需的信息,儘量不要在視圖使用不需要訪問的表。
四,在大型表或者複雜定義的視圖,可以使用存儲過程代替。
五,頻繁使用的視圖,可以使用索引視圖來代替。

相關詞條

熱門詞條

聯絡我們