MySQL視圖的作用詳解(一)-簡化複雜聯結、格式化檢索出的數據

巴扎黑
發布: 2017-05-17 16:37:45
原創
3177 人瀏覽過

利用視圖簡化複雜的聯結

視圖的最常見的應用之一是隱藏複雜的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;
登入後複製

分析:這條語句建立一個名為productcustomers 的視圖,它聯結三個表,以傳回已訂購了任意產品的所有客戶的清單。如果執行SELECT * FROM productcustomers ,將列出訂購了任意產品的客戶。

為檢索訂購了產品TNT2 的客戶,可如下進行:

輸入:

select cust_name,cust_contact from productstomers where prod_id = 'TNT2';
登入後複製

輸出:

MySQL視圖的作用詳解(一)-簡化複雜聯結、格式化檢索出的數據

分析:這句語句透過WHERE 子句從檢視中擷取特定資料。在MySQL處理此查詢時,它將指定的 WHERE 子句新增至視圖查詢中的已有WHERE 子句中,以便正確過濾資料。

可以看出,視圖大幅簡化了複雜SQL語句的使用。利用視圖,可一次編寫基礎的SQL,然後依需求多次使用。

建立可重複使用的視圖 建立不受特定資料限制的視圖是個好方法。例如,上面建立的視圖會傳回生產所有產品的客戶而不僅僅是 生產TNT2 的客戶。擴展視圖的範圍不僅使得它能被重複使用,而且甚至更有用。這樣做不需要建立和維護多個類似視圖。

以視圖重新格式化擷取的資料

如上所述,視圖的另一個常見用途是重新格式化擷取的資料。下面的SELECT 語句在單一組合計算列中傳回供應商名稱和位置:

輸入:

select concat(rtrim(vend_name),'(',rtrim(vend_country), ')') as vend_title from vendors order by vend_name;
登入後複製

輸出:

MySQL視圖的作用詳解(一)-簡化複雜聯結、格式化檢索出的數據

##現在,假如經常需要這個格式的結果。不必在每次需要時執行聯結,建立一個視圖,每次需要時使用它即可。若要將此語句轉換為檢視,可如下進行:

輸入:

create view vendorlocation as select concat(rtrim(vend_name),'(',rtrim(vend_country), ')') as vend_title from vendors order by vend_name;
登入後複製

分析:此語句使用與先前的 SELECT 語句相同的查詢建立檢視。為了檢索以建立所有郵件標籤的數據,可如下進行:

輸入:

select * from vendorlocations;
登入後複製
#輸出:

MySQL視圖的作用詳解(一)-簡化複雜聯結、格式化檢索出的數據

以上是MySQL視圖的作用詳解(一)-簡化複雜聯結、格式化檢索出的數據的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板