Home [SQL] View 檢視表的製作與刪除
Post
Cancel

[SQL] View 檢視表的製作與刪除

View 檢視表、視圖 (SQL View)

「檢視View」是指以一個以上的資料表為基礎所製作出來的邏輯資料表,可以用與一般資料表相同的方式來使用。View的基礎資料表為「實際資料表」。(View 內的資料紀錄是由實際存在的資料表中產生的)

View它就像是一個虛擬資料表,View本身並不持有任何的資料,而是在每一次發生詢問時從實際資料表取得資料,所有的 SQL 查詢語法都可以操作在此 View 上。

一個 View 可以由查詢實體資料表而建立,亦可以查詢其它已存在的 View 而建立。

View 有哪些特性

  1. 加強資料庫的安全性,View 可以將實體資料表結構隱藏起來,同時限制使用者只可以檢視及使用哪些資料表欄位。
  2. 檢視表是唯讀的,亦即外部使用者無法直接透過 View 去修改內部資料。
  3. 將複雜的 SQL 查詢包裝在 View 中,可以簡化查詢的複雜度。
  4. 當資料表結構有變更時,只需要更改 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)

This post is licensed under CC BY 4.0 by the author.