# 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)
> 藉由一些**聚合函數來進行統計運算**,以產生新的資料欄位。
例如:計算加總、平均等等,放在一個新的欄位裡。
>> 【優點】
檢視表僅顯示彙**總後的資料**,**簡化複雜的操作過程**
>>【使用時機】**計算較複雜**的數學運算