200 likes | 385 Views
第七章. 建立及使用 View. 章節概要. 7.1 什麼是 View 7.2 使用 CREATE VIEW 建立視界 7.3 使用 DROP VIEW 刪除視界 7.4 使用視界異動資料 7.5 使用視界的優缺點 . 7.1 什麼是 View.
E N D
第七章 建立及使用View
章節概要 • 7.1 什麼是View • 7.2 使用CREATE VIEW建立視界 • 7.3 使用DROP VIEW刪除視界 • 7.4 使用視界異動資料 • 7.5 使用視界的優缺點
7.1 什麼是View • 視界或檢視表(View)是一種定義於基底資料表或基本資料表(Base Table)的虛擬資料表(Virtual Table)。視界不同於一般的資料表,它們並沒有實際的資料實體;不像資料表有資料實體儲存在資料庫中,而資料庫中只會儲存其定義而已,和一般資料表一樣,我們也可以對視界執行各種查詢。視界的資料來源是源自於基底資料表,一個視界的定義也可以基於其他的視界。視界有如一扇窗戶,我們可以透過窗戶看到我們想要的資料,也像是一個固定的SELECT指令。利用視界可以使得資料的分析和操作更具有彈性。
什麼是View(續) • 我們會使用視界的主要兩個理由是: • 安全性:我們可以建立一個不具有機密性資料(如:薪資和佣金)的視界,並將之開放給一般使用者使用。 • 方便性:可以建立一個含有複雜查詢之視界,而當我們需要查詢資料時,就透過視界來執行查詢的動作,可以讓查詢看起來簡單許多。
7.2 使用CREATE VIEW建立視界 • 在關聯式資料庫中可使用CREATE VIEW來建立視界。其語法格式如下: • CREATE VIEW 視界名稱(欄位名稱一, 欄位名稱二,...) AS SELECT 指令 [WITH CHECK OPTION]
使用CREATE VIEW建立視界(續) • 其中的SELECT指令可以為以下除外的任何SELECT指令: • 包含ORDER BY子句。若需要從事排序的工作,則應於資料取出後再執行ORDER BY的動作。(SQL Server中若使用TOP子句則可以使用ORDER BY) • 包含COMPUTE或COMPUTE BY子句。 • 包含INTO關鍵字。 • 包含UNION關鍵字。 • 參考暫存資料表或資料表變數。
使用CREATE VIEW建立視界(續) • 例如我們想建立一個部門編號10的員工列表,則可建立如下的視界(Emp10): • CREATE VIEW Emp10 (EmployeeID, Name, Title) AS SELECT EmployeeID, Name, Title FROM Employees WHERE DepartmentID = 10
使用CREATE VIEW建立視界(續) • 或簡寫成 • CREATE VIEW Emp10 AS SELECT EmployeeID, Name, Title FROM Employees WHERE DepartmentID = 10
使用CREATE VIEW建立視界(續) • 如建立一個含有訂單代號、訂單日期、產品代號、產品名稱、單價及數量之視界OrderView,即可下達如下含結合運算的指令: • CREATE VIEW OrderView AS SELECT Orders.OrderID, Orders.OrderDate, OrderDetails.ProductID, Products.ProductName, OrderDetails.UnitPrice, OrderDetails.Quantity FROM Orders, OrderDetails, Products WHERE (Orders.OrderID = OrderDetails.OrderID) AND (OrderDetails.ProductID = Products.ProductID)
使用CREATE VIEW建立視界(續) • 現在我們可以使用OrderView來查詢訂單編號<=10250的各項資料,如: • SELECT OrderID, ProductID, ProductName, UnitPrice, Quantity, UnitPrice*Quantity AS AmountFROM OrderViewWHERE OrderID <= 10250ORDER BY OrderID • 其查詢的結果如下:
使用CREATE VIEW建立視界(續) • 建立一個使用次查詢來查詢所有起司的訂單明細之視界Cheese,如下: • CREATE VIEW CheeseASSELECT *FROM OrderDetailsWHERE ProductID IN( SELECT ProductID FROM Products WHERE ProductName LIKE '%起司%‘)
使用CREATE VIEW建立視界(續) • 我們想要查詢訂單編號<=10260之起司銷售明細時,即可下達如下的指令: • SELECT Cheese.*, Products.ProductNameFROM Cheese, ProductsWHERE Cheese.ProductID = Products.ProductIDAND OrderID <= 10260 • 其執行的結果如下:
7.3使用DROP VIEW刪除視界 • 假如我們想要刪除某一個視界,則可用DROP VIEW指令來執行刪除的動作。DROP VIEW的指令語法如下: • 【DROP VIEW】 DROP VIEW 視界名稱 • 如欲刪除DeptStat這個視界,則可下達如下的指令: • DROP VIEW DeptStat • 注意:DROP VIEW並不會影響到該視界所參考的基底資料表。
7.4 使用視界異動資料 • 我們可以透過視界來刪除資料,假如該視界合乎如下的限制: • 視界所依存的資料表只有一個資料表。 • 視界的建立指令中不含GROUP BY、DISTINCT、聚合函數。 • 我們可以透過視界來修改資料,假如該視界合乎如下的限制: • 視界所依存的資料表只有一個資料表。 • 視界的建立指令中不含GROUP BY、DISTINCT、聚合函數。 • 任何修改欄位均未用到表示式。
使用視界異動資料(續) • 我們可以透過視界來新增資料,假如該視界合乎如下的限制: • 視界所依存的資料表只有一個資料表。 • 視界的建立指令中不含GROUP BY、DISTINCT、聚合函數。 • 任何修改欄位均未用到表示式。 • 任何基底資料表的NOT NULL欄位均被包含在視界欄位之內。
使用視界異動資料(續) • 建立一個包含所有Customers資料表的NOT NULL欄位的視界如下: • CREATE VIEW CustomerViewASSELECT CustomerID, CompanyNameFROM Customers • 則我們可以使用如下的INSERT指令新增一筆客戶資料(合乎新增的限制規則): • INSERT INTO CustomerView(CustomerID, CompanyName)VALUES('ASKME', '艾司克米有限公司')
使用視界異動資料(續) • 我們也可以使用UPDATE指令異動客戶資料(合乎修改的限制規則),如: • UPDATE CustomerViewSET CompanyName = '艾司克米股份有限公司‘WHERE CustomerID = 'ASKME' • 我們也可以使用DELETE指令刪除客戶資料(合乎刪除的限制規則),如: • DELETE FROM CustomerViewWHERE CustomerID = 'ASKME'
7.5 使用視界的優缺點 • 使用視界如同於資料庫上開啟各種不同的可移動窗戶,使用不同的視界即擁有不同的視野。執行視界的查詢時,須經過一道轉譯的程序,將視界的查詢指令和該視界的定義結合起來,轉換成對原來的基底資料表的查詢指令,稱為視界的轉譯。
使用視界的優缺點(續) • 使用視界的優點如下: • 增加資料安全性 • 簡化資料查詢 • 增加獨立性 • 其主要缺點如下: • 執行效率差 • 操作限制較多 • 增加管理的複雜度 • 造成轉譯的問題: