第七章

20
第第第 第第第第第 View

description

第七章. 建立及使用 View. 章節概要. 7.1 什麼是 View 7.2 使用 CREATE VIEW 建立視界  7.3 使用 DROP VIEW 刪除視界  7.4 使用視界異動資料  7.5 使用視界的優缺點 . 7.1 什麼是 View. - PowerPoint PPT Presentation

Transcript of 第七章

Page 1: 第七章

第七章

建立及使用 View

Page 2: 第七章

2

章節概要• 7.1 什麼是V iew • 7.2 使用 CREATE VIEW建立視界 • 7.3 使用DROP VIEW刪除視界 • 7.4 使用視界異動資料 • 7.5 使用視界的優缺點 

Page 3: 第七章

3

7.1 什麼是 View

• 視界或檢視表 (View)是一種定義於基底資料表或基本資料表 (Base Table)的虛擬資料表(Virtual Table)。視界不同於一般的資料表,它們並沒有實際的資料實體;不像資料表有資料實體儲存在資料庫中,而資料庫中只會儲存其定義而已,和一般資料表一樣,我們也可以對視界執行各種查詢。視界的資料來源是源自於基底資料表,一個視界的定義也可以基於其他的視界。視界有如一扇窗戶,我們可以透過窗戶看到我們想要的資料,也像是一個固定的 SELECT指令。利用視界可以使得資料的分析和操作更具有彈性。

Page 4: 第七章

4

什麼是 View( 續 )

•我們會使用視界的主要兩個理由是:– 安全性:我們可以建立一個不具有機密性資料

( 如:薪資和佣金 ) 的視界,並將之開放給一般使用者使用。

– 方便性:可以建立一個含有複雜查詢之視界,而當我們需要查詢資料時,就透過視界來執行查詢的動作,可以讓查詢看起來簡單許多。

Page 5: 第七章

5

7.2 使用 CREATE VIEW建立視界

•在關聯式資料庫中可使用 CREATE VIEW來建立視界。其語法格式如下:– CREATE VIEW 視界名稱 ( 欄位名稱一 ,

欄位名稱二 ,...) AS SELECT 指令 [WITH CHECK OPTION]

Page 6: 第七章

6

使用 CREATE VIEW建立視界( 續 )

•其中的 SELECT指令可以為以下除外的任何SELECT指令:– 包含ORDER BY子句。若需要從事排序的工作,則應於資料取出後再執行ORDER BY的動作。(SQL Server中若使用 TOP子句則可以使用ORDER BY)

– 包含 COMPUTE 或 COMPUTE BY子句。– 包含 INTO關鍵字。– 包含UNION關鍵字。– 參考暫存資料表或資料表變數。

Page 7: 第七章

7

使用 CREATE VIEW建立視界( 續 )

•例如我們想建立一個部門編號 10的員工列表,則可建立如下的視界 (Emp10):– CREATE VIEW Emp10 (EmployeeID,

Name, Title) AS SELECT EmployeeID, Name, Title FROM Employees WHERE DepartmentID = 10

Page 8: 第七章

8

使用 CREATE VIEW建立視界( 續 )

•或簡寫成– CREATE VIEW Emp10 AS SELECT EmployeeID, Name, Title FROM Employees WHERE DepartmentID = 10

Page 9: 第七章

9

使用 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)

Page 10: 第七章

10

使用 CREATE VIEW建立視界( 續 )

•現在我們可以使用OrderView來查詢訂單編號 <=10250的各項資料,如:– SELECT OrderID, ProductID,

ProductName, UnitPrice, Quantity,

UnitPrice*Quantity AS AmountFROM OrderViewWHERE OrderID <= 10250ORDER BY OrderID

•其查詢的結果如下:

Page 11: 第七章

11

使用 CREATE VIEW建立視界( 續 )

Page 12: 第七章

12

使用 CREATE VIEW建立視界( 續 )

• 建立一個使用次查詢來查詢所有起司的訂單明細之視界 Cheese,如下:– CREATE VIEW Cheese

ASSELECT *FROM OrderDetailsWHERE ProductID IN( SELECT ProductID FROM Products WHERE ProductName LIKE '%起司%‘)

Page 13: 第七章

13

使用 CREATE VIEW建立視界( 續 )

•我們想要查詢訂單編號<=10260之起司銷售明細時,即可下達如下的指令:– SELECT Cheese.*,

Products.ProductNameFROM Cheese, ProductsWHERE Cheese.ProductID = Products.ProductIDAND OrderID <= 10260

•其執行的結果如下:

Page 14: 第七章

14

7.3使用DROP VIEW刪除視界

•假如我們想要刪除某一個視界,則可用DROP VIEW指令來執行刪除的動作。DROP VIEW的指令語法如下:– 【 DROP VIEW 】 DROP VIEW 視界名稱

•如欲刪除DeptStat這個視界,則可下達如下的指令:– DROP VIEW DeptStat

•注意:DROP VIEW並不會影響到該視界所參考的基底資料表。

Page 15: 第七章

15

7.4 使用視界異動資料• 我們可以透過視界來刪除資料,假如該視界合乎如下的限制:– 視界所依存的資料表只有一個資料表。– 視界的建立指令中不含GROUP BY 、 DISTINCT、聚合函數。

• 我們可以透過視界來修改資料,假如該視界合乎如下的限制:– 視界所依存的資料表只有一個資料表。– 視界的建立指令中不含GROUP BY 、 DISTINCT、聚合函數。

– 任何修改欄位均未用到表示式。

Page 16: 第七章

16

使用視界異動資料 ( 續 )

•我們可以透過視界來新增資料,假如該視界合乎如下的限制:– 視界所依存的資料表只有一個資料表。– 視界的建立指令中不含GROUP

BY 、 DISTINCT、聚合函數。– 任何修改欄位均未用到表示式。– 任何基底資料表的NOT NULL欄位均被包含在視界欄位之內。

Page 17: 第七章

17

使用視界異動資料 ( 續 )

• 建立一個包含所有 Customers資料表的NOT NULL欄位的視界如下:– CREATE VIEW CustomerView

ASSELECT CustomerID, CompanyNameFROM Customers

• 則我們可以使用如下的 INSERT指令新增一筆客戶資料 ( 合乎新增的限制規則 ) :– INSERT INTO CustomerView(CustomerID,

CompanyName)VALUES('ASKME', '艾司克米有限公司 ')

Page 18: 第七章

18

使用視界異動資料 ( 續 )

•我們也可以使用 UPDATE指令異動客戶資料 ( 合乎修改的限制規則 ) ,如:– UPDATE CustomerView

SET CompanyName = '艾司克米股份有限公司‘WHERE CustomerID = 'ASKME'

•我們也可以使用DELETE指令刪除客戶資料 ( 合乎刪除的限制規則 ) ,如:– DELETE FROM CustomerView

WHERE CustomerID = 'ASKME'

Page 19: 第七章

19

7.5 使用視界的優缺點•使用視界如同於資料庫上開啟各種不同的可移動窗戶,使用不同的視界即擁有不同的視野。執行視界的查詢時,須經過一道轉譯的程序,將視界的查詢指令和該視界的定義結合起來,轉換成對原來的基底資料表的查詢指令,稱為視界的轉譯。

Page 20: 第七章

20

使用視界的優缺點 ( 續 )

•使用視界的優點如下:– 增加資料安全性– 簡化資料查詢– 增加獨立性

•其主要缺點如下:– 執行效率差– 操作限制較多– 增加管理的複雜度– 造成轉譯的問題: