1、什麼是視圖
執行一條SQL,將結果集保存在一張虛擬表中
2、爲什麼要使用視圖
- 重複利用SQL語句
- 簡化SQL查詢,快速取數據
- 只用知道表的部分結構
- 保護數據,根據特定授權
- 更改數據格式和表示,視圖可返回與底層表的表示和格式不同的數據。
注意事項
• 在視圖創建後,可以用與表基本相同的方式使用(查詢、過濾、排序數據、與其他視圖或連結、(添加、更新))
• 視圖只是用來查看存儲在別處的數據的設施,本身不包含數據,返回的數據也是從其他表檢索出來的。
• 因爲視圖本身不包含數據,索引多個表連結或嵌套可能存在性能問題,需測試
3、規則和限制
- 表名必須唯一(與其他視圖和表)
- 創建視圖沒有限制
- 足夠權限
- 視圖可以嵌套,可以從其他視圖查詢來構造一個視圖
- 如果視圖和從視圖中查詢都有order by,視圖中的order by將被覆蓋
- 視圖不能索引
- 視圖可以和表一起使用
4、使用視圖
- 創建視圖 create view
- 查看創建視圖的語句。Show create view viewname
- 刪除視圖 drop view viewname
- 更新視圖,1⃣️ 先drop後create 2⃣️ 直接用create or replace view
- 利用視圖簡化複雜的聯結查詢
5、利用視圖簡化複雜的聯結查詢
創建視圖
CREATE VIEW productcustomers AS
SELECT cust_name, cust_contact, prod_id
FROM customers, orders, orderitems
WHERE customers.cust_id = orders.cust_id
AND orderitems.order_num = orders.order_num
使用視圖
SELECT cust_name, cust_contact
FROM productcustomers
WHERE prod_id = 'TNT2';
6、用視圖重新格式化檢索出的數據
select concat (rtrim(vend_name) , '(',rtrim(vend_country),')') as vend_title from vendors order by vend_name;
如果經常用到這個格式的話,可以創建一個視圖
CREATE VIEW vendorlocations AS
SELECT
concat ( rtrim( vend_name ), '(', rtrim( vend_country ), ')' ) AS vend_title
FROM
vendors
ORDER BY
vend_name;
可以直接通過視圖查詢得出結果
SELECT * FROM vendorlocations;