22 视图

来源:互联网 发布:软件系统性能指标要求 编辑:程序博客网 时间:2024/05/21 19:35

视图小结

视图是虚拟的表,它不包含数据,它包含的是一个SQL查询。

为什么使用视图

重用SQL语句;
简化复杂的SQL操作;
使用表的一部分而不是整个表;
保护数据;
更改数据格式。

性能问题:

视图不包含数据,每次使用视图,都要处理执行查询时所需的任一个检索。所以当联结较多或视图嵌套时,可能性能下降厉害。

视图使用限制

唯一命名;
创建视图,必须有足够的访问权限;
视图可以嵌套;
order by可以用在视图中,但如果该视图的selete语句中也有,那么该视图中的order by将被覆盖;
视图和表可以一起使用,如联结表和视图的selete语句。

视图使用

创建:

create view

查看:

show create view [视图名]

删除:

drop view [视图名]

更新:

create or replace view(如果更新的视图不存在,创建;如果存在,则替换)

视图最常见的应用:

隐藏复杂的SQL

一次性编写基础的SQL,然后根据需要,多次使用。

例:3个表联结,返回所有用户订购产品的列表

create view productcustomers as   //创建视图    selete cust_name,prod_id    from customers,orders,orderitems    where customers.cust_id=orders.cust_id and     orders.cust_num=orderitems.cust_num;//联结条件

使用视图
例:减少订购了TNT2的客户

selete cust_name,prod_idfrom  productcustomers       //直接使用视图where prod_id='TNT2';

使用视图重新格式化检索出的数据

例:

selete concat(vend_name,'(',vend_country,')')                 as vend_titlefrom vendorsorder by vend_name;

如果经常使用以上格式,创建一个视图,根据需要直接使用,即:

create view vendlocations asselete concat(vend_name,'(',vend_country,')') as vend_titlefrom vendorsorder by vend_name;

使用:

selete *from vendlocations;

过滤不想要的数据

例:排除没有email的客户

create view customeremail  asselete cust_id,cust_name,cust_emailfrom customerswhere cust_email is not mull;

使用视图与计算字段

例:

create view orderitemsexpanded  asselete order_num,       prod_id,       quantity,       item_price,       quantity*item_price as expanded_pricefrom orderitems;

使用:检索某个订单中的物品

selete *from orderitemsexpandedwhere order_num=20005;

视图更新

一般,视图是可以更新的。更新视图将更新其基表;
当视图定义中有以下操作(分组、联结、子查询、并、聚集函数),则视图不能更新。

以上,视图最好用于查询,而不是更新。

原创粉丝点击