# Ch01 檢視表 View ## 01_甚麼是檢視表? * <font color="#f00">**介紹**</font> : 是一個**虛擬資料表**,實際上並**沒有儲存資料**,是將**查詢的語法儲存起來** * <font color="#f00">**用途**</font> : 就是可以提供不同的使用者**不同的查詢資訊**、有**保密**與**資料隱藏**的作用。 * <font color="#f00">**優點**</font> : 降低複雜度、提高保密性、提高程式維護性 * <font color="#f00">**缺點**</font> :執行效率差、操作限制較多 ## 02_建立檢視表 * 建立來自單一資料表![](https://i.imgur.com/NtzYApm.png) ```sql== CREATE VIEW 檢視表001 AS SELECT * FROM books ``` ![](https://i.imgur.com/R928gqD.png) * 建立來自多個資料表 ```sql== CREATE VIEW 檢視表002 AS SELECT A.書籍編號, B.書籍名稱 FROM books AS A, company1 AS B ``` ![](https://i.imgur.com/wfsjIv1.png) * 建立"一個具有別名"的檢視表 ```sql= CREATE VIEW 課程檢視表 AS SELECT 課程代號 AS 課號, 課程名稱 AS 課名 FROM 課程資料表; ``` ```sql= CREATE VIEW 課程檢視表2 (課號, 課名) AS SELECT 課程代號, 課程名稱 FROM 課程資料表; ``` ## 03_編輯檢視表 * 新增資料到已經存在的虛擬表格內 ```SQL= INSERT INTO 檢視表001 VALUES(1000,'JL',400,7); ``` ![](https://i.imgur.com/PX4fdlC.png) * 更改虛擬表格中的(記錄)之屬性值 ```SQL= UPDATE 檢視表001 SET 價格 = '1000' WHERE 書籍名稱='JL' ``` ![](https://i.imgur.com/Sc7B5Cr.png) > 【注意】虛擬表格修改資料時,**基底資料表也會自動對映修改資料** 基本上,我們也可以透過視界來「刪除及修改」資料,但是視界在進行操作時,必須符合下列條件方能成為可更新: 1. 視界的來源資料表只能有一個資料表。 2. 視界的建立指令中不含GROUP BY、DISTINCT、聚合函數。 3. 要包含原資料表的主鍵,否則無法異動。 4. 不可直接含有DISTINCT關鍵字。 5. 不能有GROUP BY子句,也不能有HAVING子句。 6. 異動反應到基底資料表時,也必須符合基底資料表的條件約束。 ## 04_編輯檢視表 * 修改檢視表 ```sql= ALTER VIEW 檢視表001 AS SELECT* FROM books WHERE 書籍編號=5; ``` ![](https://i.imgur.com/smVSJVE.png) ```sql= CREATE OR REPLACE VIEW 檢視表001 AS SELECT* FROM books WHERE 書籍編號=6; ``` ![](https://i.imgur.com/GruVTCC.png) * 刪除檢視表 > 【注意】DROP VIEW並不會影響 到該視界所參考的基底資料表。 ```sql= DROP VIEW 檢視表001; ``` ![](https://i.imgur.com/Y0bWzQ2.png) ## 05_常見的檢視表 目前常用的視界表格種類,基本上常見有三種: 1. 行列子集視界(Row-Column Subset VIEWs) >是指從單一個資料表或視界來**過濾不必要的資料**,所以在行或列的資料上,都會**少於或等於原本資料表**。 >>【優點】1. 資料以**更簡化**的形式呈現 2. 同時兼具**保密**的功能3. 將不願意開放的**資料隱藏**起來。 >> 【使用時機】對於**安全性**及**保密性**較高的情況 2. 合併多個關聯表視界(Join VIEWs) >是指將**兩個以上**的資料表或視界在符合某**條件合併後**產生另一個**新的視界**。 >>【優點】1. 讓使用者**不必經過合併運算**便取得相關表格的欄位資料。例如:是指利用 **「虛擬資料表」直接來查詢**。2. 使用檢視表可以**簡化繁雜的合併操作** 3. 可以省去**每次都要輸入一連串查詢敘述**的困擾。 >>【使用時機】對於常用的**固定查詢** 3. 統計彙總視界(Statistic Summary VIEWs) > 藉由一些**聚合函數來進行統計運算**,以產生新的資料欄位。 例如:計算加總、平均等等,放在一個新的欄位裡。 >> 【優點】 檢視表僅顯示彙**總後的資料**,**簡化複雜的操作過程** >>【使用時機】**計算較複雜**的數學運算