在視圖建立以後,能夠用與表基本相同的方式利用它們。能夠對視圖執行 SELECT操做,過濾和排序數據,將視圖聯結到其餘視圖或表,甚至能添加和更新數據。mysql
由於視圖不包含數據,因此每次使用視圖時,都必須處理查詢執行時所需的任一個檢索。有可能性能降低的厲害。sql
假如咱們要找到prod_id爲‘TNT2’的訂單號、顧客的信息,咱們將使用三張表以下:數據庫
mysql> select cust_name,cust_contact -> from customers,orders,orderitems -> where customers.cust_id = orders.cust_id -> and orderitems.order_num = orders.order_num -> and prod_id = 'TNT2';
這樣很複雜,咱們能夠把須要的字段都提煉出來成爲一個視圖:函數
mysql> 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;
如今咱們只要在視圖中檢索prod_id值爲'TNT2'便可。性能
mysql> select cust_name,cust_contact -> from productcustomers -> where prod_id = 'TNT2';
結果一致:code
+----------------+--------------+ | cust_name | cust_contact | +----------------+--------------+ | Coyote Inc. | Y Lee | | Yosemite Place | Y Sam | +----------------+--------------+ 2 rows in set (0.00 sec)
建立可重用的視圖:排序
擴展視圖的範圍,有助於咱們以後反覆使用此視圖而不用新建其它的視圖。例如咱們上面生產全部產品的客戶而不單單是生產TNT2的客戶。這樣就可能有助於咱們以後的檢索了。索引
視圖使用狀況:
能夠將咱們須要的一些值放到視圖中,好比鏈接的新數據:產品
Create View vendorlocation AS select concat(RTrim(vend_name),'(',RTrim(vend_Country),')') as vend_title from vendors;
這樣下次從這個視圖裏檢索數據進行了。it
又好比咱們能夠把非空值的數據都檢索到一個視圖中,下次查詢非空值就能夠直接檢索這個視圖。
咱們也可使用計算字段和視圖一塊兒。好比兩個列相乘,也能夠保存在視圖中,以後直接檢索這個視圖便可。
==咱們使用視圖是爲了檢索,而不是更新數據。==
即便咱們也可能能夠經過視圖來修改數據(這樣基表中的數據也會被改變),可是咱們不提倡這麼作。並且視圖中更新數據也頗有限制。使用分組,子查詢,並,聯結,彙集函數,distinct等定義的視圖都不能被更新。