[SQL] 查詢語法基本介紹 Part 5 (視觀表 View)
基本介紹:
視觀表又稱檢視表,是一個虛擬的資料表。視觀表本身並無儲存資料,只有定義資料,定義從那些資料表或檢視表挑出那些欄位或記錄。
雖然視觀表不是一個真正的資料表,是由SQL Command所產生。但是完全可以當成一般的資料表使用,可以新增、更新、刪除資料,但這些操作實際上是作用在其定義的來源資料表。
另一個角度來看,可以是將特定查詢的SQL Command以View的方式,儲存在資料庫裡。
在建立視觀表時,建議在名稱前方加上特定字串以供區別,如:VW_userinfo_taipei。
優點:隱藏/過濾原始資料,並簡化資料查詢。
- 達成邏輯資料獨立。
- 增加資料安全性。
- 簡化資料查詢。
- 簡化使用者觀點。
缺點:多一道建立過程,且沒有真正資料,所以有更多的操作限制。
- 執行效率差。
- 更多的操作限制。
- 增加管理的複雜度。
語法範例:
建立一個住在台北市民眾資料的視觀表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)
- 用資料庫_檢視 新增視觀表 (非資訊相關科系使用的方法/圖形化/如ACCESS)
- 確認要加入的資料表
- 確認資料表關連是否正確(新增關聯 by 拖拉需要關聯的欄位/右鍵移除/ 電腦自動產生關聯不一定是正確的)
- 勾選要顯示/輸出的欄位
- 選取菱形圖形(確認選取哪一個資料表列_left/right join)
- 建立別名 (右方為搜尋條件欄位)
- 確認下方Command是否正確
- 儲存檔案(建立檔名)
總結:
**可將常用語法使用view儲存於資料庫,當需要巢狀等類似的複雜語法時,可用此方法簡化。(盡量建VIEW)**儲存在資料庫的視觀表可重複編輯修改 (右鍵_設計)
**視觀表製作同樣需要建立資料字典與ER文件。
**將視觀表中欄位建別名有助於資料辨別 (使用as)
**若沒有利用View這個功能,在處理如電話費等變動的資料時,若另建立一個真的電話費總額的資料表,當未來有資料增加或修改時,資料可能不會連動修改,進而造成資料錯亂。
**複雜的查詢不建議使用圖形化方式,建議使用指令建立VIEW。
留言
張貼留言