一、视图的概念
视图是虚拟的表。它将select语句查询到的数据包装成一张虚拟的表。后续可以直接利用这张虚拟表而不必知道原有表的结构,从而能简化后续的SQL操作。
【注】视图本身是不包含数据的。视图提供了一种MySQL的select语句层次的封装,可用来简化数据处理以及重新格式化基础数据或保护基础数据。
二、利用视图简化复杂的联结
举例:
create view productcustomers as
select cust_name, cust_contact, prod_id
from customers, orders, orderitems
where customer.cust_id = orders.cust_id
and orderitems.order_num = orders.order_num;
/*
这条语句创建了一个名为productcustomers的视图,它联结了三个表,返回了一张包含了已订购任意产品的所有客户 的虚拟表。
*/
select cust_name, cust_contact
from productcustomers
where prod_id = 'TNT2';
-- 从视图中检索订购了产品'TNT2'的客户。
可以看出,利用视图可以极大地简化复杂的SQL语句。一次创建出来的视图可以被多次重复使用。
三、利用视图重新格式化检索出的数据
举例:
create view vendorlocations as
select concat(rtrim(vend_name), '(', rtrim(vend_country), ')')
as vend_title
from vendors
order by vend_name;
/*
如果需要经常使用这个格式的结果,就可以创建一个这样的视图,这样不必每次都得执行字符串连接操作,只需要直接使 用已有的视图即可。
*/
select *
from vendorlocation;
-- 从视图中直接检索这个格式的结果即可。
四、利用视图过滤不想要的数据
举例:
create view customeremaillist as
select cust_id, cust_name, cust_email
from customers
where cust_email is not null;
/*
先利用where子句过滤掉cust_email为null的那些行,然后创建视图,就可以得到一张所有cust_email都不为空的 虚拟表了。
*/
五、利用视图简化计算字段的使用
举例:
create view orderitemsexpanded as
select order_num,
prod_id,
quantity,
item_price,
quantity*item_price as expanded_price
from orderitems;
select *
from orderitemsexpanded
where order_num = 20005;