視圖

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能做的,視圖都可以。
用書上總結的話來說:

  1. 視圖是虛擬的表。
  2. 它是一種SELECT語句的封裝,從而簡化數據處理,格式化,進而達到保護基礎數據的目的。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容