1. 概述
數據請采用我的另一篇文章《我的SQL學習》中的數據。
環境MySQL5.7,workbench。
視圖
2. 歷程
也不知道怎么回事兒,在視圖這一節,突然就想明白了聯結。
所謂的表的聯結,其實就是通過兩個表中相同的主鍵值,來將兩個表的信息放到一個表中。或者多個表的信息放到一個表中。
而我們這里所要說的視圖,就相當于把聯結的表保存下來了,在別處的查詢中我可以使用視圖。說白了,視圖,就是一個表,不過,是我們由源數據組成的表加工出來的表。
這也說明了,視圖是實時更新的,因為它是由查詢得到的。
3. 視圖
3.1 創建視圖
USE test; #用必知必會d的數據創建的數據庫
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;
創建視圖時,需要注意視圖的可重復使用性;
你可以注意到,通過創建視圖,我們可以很好地降低聯結的復雜性,從而簡化聯結及查詢。
3.2 刪除視圖
DROP VIEW ProductCustomers;
3.3 格式化檢索數據
上面我們說了,視圖的本質其實就是一個表,或者說一個查詢結果,因此當我們需要重復使用某一種格式的數據的時候,我們可以通過視圖來創建一個格式化后的表。
USE test;
CREATE VIEW Vendorlocations AS
SELECT CONCAT(RTRIM(vend_name),'(',RTRIM(vend_country),')' )#具體請查看“連接”
AS vend_title
FROM vendors; #創建視圖
SELECT * FROM Vendorlocations; #查看
結果
3.4 視圖過濾
因為是一種查詢結果,顯而易見,它也可以使用where子句。
CREATE VIEW CustomerEmaillist AS
SELECT cust_id,cust_name,cust_email
FROM customers
WHERE cust_email IS NOT NULL; #過濾沒有電子郵件地址的顧客。
SELECT * FROM CustomerEmaillist;
結果
3.5 計算字段
CREATE VIEW zongjia AS
SELECT
order_num,
prod_id,
quantity,
item_price,
quantity * item_price AS expanded_price #進行計算
FROM orderitems;
SELECT * FROM zongjia WHERE order_num = 20008;
結果
所以說,就我目前看來(初學),我覺得SELECT能做的,視圖都可以。
用書上總結的話來說:
- 視圖是虛擬的表。
- 它是一種SELECT語句的封裝,從而簡化數據處理,格式化,進而達到保護基礎數據的目的。