在视图建立以后,能够用与表基本相同的方式利用它们。能够对视图执行 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等定义的视图都不能被更新。