執行一條SQL,將結果集保存在一張虛擬表中mysql
注意事項
• 在視圖建立後,能夠用與表基本相同的方式使用(查詢、過濾、排序數據、與其餘視圖或連結、(添加、更新))
• 視圖只是用來查看存儲在別處的數據的設施,自己不包含數據,返回的數據也是從其餘表檢索出來的。
• 由於視圖自己不包含數據,索引多個表連結或嵌套可能存在性能問題,需測試sql
建立視圖函數
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';
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;
能夠直接經過視圖查詢得出結果code
SELECT * FROM vendorlocations;
排序
create view custmeremaillist AS SELECT cust_id ,cust_name,cust_email from customers where cust_email is not NULL;
直接使用視圖索引
SELECT * from custmeremaillist ;
mysql查詢rem
SELECT prod_id, quantity, item_price, quantity * item_price AS expanded_price FROM orderitems WHERE order_num=20005;
建立視圖it
CREATE VIEW orderitemsexpanded AS SELECT order_num, prod_id, quantity, item_price, quantity * item_price AS expanded_price FROM orderitems WHERE order_num=20005;
使用視圖
SELECT * FROM orderitemsexpanded WHERE order_num=20005;
一般,視圖是能夠更新的(insert、update、delete)。更新視圖將更新基表。若是視圖中有如下定義將不能被更新。
1. 分組(group by 和 having) 2. 聯結 3. 自查詢 4. 並 5. 聚合函數(min()、count()、sum()等) 6. Distinct 7. 導出(計算)列
因此視圖最好直接使用select查詢
以上內容均引自《mysql必知必會》