[SQL] 查詢語法基本介紹 Part 5 (視觀表 View)

基本介紹:

視觀表又稱檢視表,是一個虛擬的資料表。

視觀表本身並無儲存資料,只有定義資料,定義從那些資料表或檢視表挑出那些欄位或記錄。

雖然視觀表不是一個真正的資料表,是由SQL Command所產生。但是完全可以當成一般的資料表使用,可以新增、更新、刪除資料,但這些操作實際上是作用在其定義的來源資料表。

另一個角度來看,可以是將特定查詢的SQL Command以View的方式,儲存在資料庫裡。

在建立視觀表時,建議在名稱前方加上特定字串以供區別,如:VW_userinfo_taipei。

優點:隱藏/過濾原始資料,並簡化資料查詢。

  1. 達成邏輯資料獨立。
  2. 增加資料安全性。
  3. 簡化資料查詢。
  4. 簡化使用者觀點。

缺點:多一道建立過程,且沒有真正資料,所以有更多的操作限制。

  1. 執行效率差。
  2. 更多的操作限制。
  3. 增加管理的複雜度。

語法範例:

建立一個住在台北市民眾資料的視觀表

CREATE VIEW v_userinfo_taipei AS
SELECT userinfo.uid, cname, address
FROM userinfo, live, house
WHERE
userinfo.uid = live.uid AND
live.hid = house.hid AND
house.address LIKE = '台北市%'

注意!AS後面只能接一個SQL Command (巢狀/UNION ALL)

使用視觀表:與一般查詢資料表相同

--查詢住在台北市民眾資料的所有欄位
select * from v_userinfo_taipei

--查詢住在台北市民眾資料共有幾筆
Select count(*) from v_userinfo_taipei

進階練習:查詢平均電話費大於300的費用

--先建立含有平均電話費的視觀表
create view vw_avg_fee as
select tel, round(avg(fee),0) as avg_fee
from bill
group by tel

--使用視觀表並篩選資料
select * from vw_avg_fee
where avg_fee > 300

其他解法分享 (不使用VIEW的方法)

--篩選大於300的平均費用(解一,使用having語法)
select tel, round(avg(fee),0) as avg_fee
from bill
group by tel
having round(avg(fee),0) > 300 --having 要用在group by 後面

--篩選大於300的平均費用(解二,使用巢狀查詢)
select * from(
select tel, round(avg(fee),0) as avg_fee
from bill
group by tel
) as a
where avg_fee > 300

以圖形化介面建立視觀表(MS-SQL)

  1. 用資料庫_檢視 新增視觀表 (非資訊相關科系使用的方法/圖形化/如ACCESS)
  2. 確認要加入的資料表
  3. 確認資料表關連是否正確(新增關聯 by 拖拉需要關聯的欄位/右鍵移除/ 電腦自動產生關聯不一定是正確的)
  4. 勾選要顯示/輸出的欄位
  5. 選取菱形圖形(確認選取哪一個資料表列_left/right join)
  6. 建立別名 (右方為搜尋條件欄位)
  7. 確認下方Command是否正確
  8. 儲存檔案(建立檔名)

總結:

**可將常用語法使用view儲存於資料庫,當需要巢狀等類似的複雜語法時,可用此方法簡化。(盡量建VIEW)

**儲存在資料庫的視觀表可重複編輯修改 (右鍵_設計)

**視觀表製作同樣需要建立資料字典與ER文件。

**將視觀表中欄位建別名有助於資料辨別 (使用as)

**若沒有利用View這個功能,在處理如電話費等變動的資料時,若另建立一個真的電話費總額的資料表,當未來有資料增加或修改時,資料可能不會連動修改,進而造成資料錯亂。

**複雜的查詢不建議使用圖形化方式,建議使用指令建立VIEW。

留言

Popular Posts

[T-SQL] T-SQL 基本介紹_筆記

[SQL] MS-SQL資料庫卸離與備份還原