22 视图

视图小结

视图是虚拟的表,它不包含数据,它包含的是一个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_id
from  productcustomers       //直接使用视图
where prod_id='TNT2';
使用视图重新格式化检索出的数据

例:

selete concat(vend_name,'(',vend_country,')') 
                as vend_title
from vendors
order by vend_name;

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

create view vendlocations as
selete concat(vend_name,'(',vend_country,')') as vend_title
from vendors
order by vend_name;

使用:

selete *
from vendlocations;
过滤不想要的数据

例:排除没有email的客户

create view customeremail  as
selete cust_id,cust_name,cust_email
from customers
where cust_email is not mull;
使用视图与计算字段

例:

create view orderitemsexpanded  as
selete order_num,
       prod_id,
       quantity,
       item_price,
       quantity*item_price as expanded_price
from orderitems;

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

selete *
from orderitemsexpanded
where order_num=20005;

视图更新

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值