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;
视图更新
一般,视图是可以更新的。更新视图将更新其基表;
当视图定义中有以下操作(分组、联结、子查询、并、聚集函数),则视图不能更新。
以上,视图最好用于查询,而不是更新。
阅读全文
0 0
- 22 视图
- [MYSQL -22]使用视图
- 视图
- 视图
- 视图
- 视图
- 视图
- 视图
- 视图
- 视图
- 视图
- 视图
- 视图
- 视图
- 视图
- 视图
- 视图
- 视图
- RxJava笔记2
- Bribe the Prisoners(GCJ 2009 Round 1C C)(dp)
- C#,两个接口相同名称函数调用时的区分
- Mysql数据库防SQL注入原理
- emmit快捷键
- 22 视图
- Android开发,自定义View(三)-----圆环交替 等待效果
- PERT图相关计算
- F_CPU not defined for <util/delay.h> 问题解决
- Java泛型
- Apollo 1.0 指南
- Java实现页面显示中的信息分页
- linux的ipv6解决方案
- 容器云下hadoop集群的搭建