利用視圖簡化複雜的聯結
視圖的最常見的應用之一是隱藏複雜的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';
輸出:
分析:這句語句透過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;
輸出:
##現在,假如經常需要這個格式的結果。不必在每次需要時執行聯結,建立一個視圖,每次需要時使用它即可。若要將此語句轉換為檢視,可如下進行:輸入:create view vendorlocation as select concat(rtrim(vend_name),'(',rtrim(vend_country), ')') as vend_title from vendors order by vend_name;
select * from vendorlocations;
以上是MySQL視圖的作用詳解(一)-簡化複雜聯結、格式化檢索出的數據的詳細內容。更多資訊請關注PHP中文網其他相關文章!