View 檢視表、視圖 (SQL View)
「檢視View」是指以一個以上的資料表為基礎所製作出來的邏輯資料表,可以用與一般資料表相同的方式來使用。View的基礎資料表為「實際資料表」。(View 內的資料紀錄是由實際存在的資料表中產生的)
View它就像是一個虛擬資料表,View本身並不持有任何的資料,而是在每一次發生詢問時從實際資料表取得資料,所有的 SQL 查詢語法都可以操作在此 View 上。
一個 View 可以由查詢實體資料表而建立,亦可以查詢其它已存在的 View 而建立。
View 有哪些特性
- 加強資料庫的安全性,View 可以將實體資料表結構隱藏起來,同時限制使用者只可以檢視及使用哪些資料表欄位。
- 檢視表是唯讀的,亦即外部使用者無法直接透過 View 去修改內部資料。
- 將複雜的 SQL 查詢包裝在 View 中,可以簡化查詢的複雜度。
- 當資料表結構有變更時,只需要更改 View 的設定,不需更改程式。
不過,
View也會讓檢索進度變慢的缺點,由於使用View可以非常簡單的地寫出SQL語法 為可能會有「這樣或許讓SQL的檢索速度變快」的錯覺;事實上,使用View之後並無法讓檢索速度變快,原因在於查詢的最佳化會在View內部關閉。
建立 View (Create View)
語法
1
2
3
4
CREATE VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;
範例1
製作顯示商品別總販賣業績(販賣單價*數量)的檢視表
1
2
3
4
5
6
--製作顯示商品別總販賣業績(販賣單價*數量)的檢視表
create view 商品別總販賣業績 as
select B.商品名稱, sum(B.販賣單價 * A.數量) "總販賣業績"
from 販賣資料 A
join 商品清單 B on A.商品ID = B.商品ID
group by B.商品名稱
查詢 View
1
select * from 商品別總販賣業績
執行結果:
1
2
3
4
5
6
7
8
9
10
商品名稱 總販賣業績
15吋液晶螢幕 720000
17吋螢幕 200000
19吋螢幕 285000
HUB 42000
印表機 30000
桌上型電腦 1080000
掃描器 24000
筆記型電腦 2160000
網路卡 48000
範列2
The following SQL creates a view that shows all customers from Brazil:
1
2
3
4
CREATE VIEW [Brazil Customers] AS
SELECT CustomerName, ContactName
FROM Customers
WHERE Country = 'Brazil';
We can query the view above as follows:
1
SELECT * FROM [Brazil Customers]
範例3
The following SQL creates a view that selects every product in the “Products” table with a price higher than the average price:
1
2
3
4
CREATE VIEW [Products Above Average Price] AS
SELECT ProductName, Price
FROM Products
WHERE Price > (SELECT AVG(Price) FROM Products);
We can query the view above as follows:
1
SELECT * FROM [Products Above Average Price];
更新 View (Create Or Alter View)
如果加上 OR ALTER 子句的意思就是若同名的 View 已經存在就覆蓋取代它。如果 View 不存在,我們可以把 CREATE OR ALTER VIEW 看做是如同 CREATE VIEW;而如果 View 已存在,我們可以把 CREATE OR ALTER VIEW 看做是 ALTER VIEW。
OR ALTER適用於:Azure SQL Database 和 SQL Server (從 SQL Server 2016 (13.x) SP1 開始)。OR REPLACESQL Server 2014 (12.x) 和舊版的 Transact-SQL 語法
語法
1
2
3
4
CREATE OR ALTER VIEW view_name AS --CREATE OR REPLACE View 舊語法
SELECT column1, column2, ...
FROM table_name
WHERE condition;
範例
SQL多加一個「商品ID」欄位到「商品別總販賣業績」檢視表中。
(若檢視表不存在就新增)
1
2
3
4
5
6
--製作顯示商品別總販賣業績(販賣單價*數量)的檢視表
create or alter view 商品別總販賣業績 as
select B.商品ID, B.商品名稱, sum(B.販賣單價 * A.數量) "總販賣業績"
from 販賣資料 A
join 商品清單 B on A.商品ID = B.商品ID
group by B.商品ID, B.商品名稱
刪除 View (Drop View)
1
drop view view_name
1
2
--刪除「商品別總販賣業績」檢視表
drop view 商品別總販賣業績
MSDN - CREATE VIEW (Transact-SQL)
w3schools - SQL CREATE VIEW Statement
fooish - View 檢視表、視圖 (SQL View)