1. 概述
数据请采用我的另一篇文章《SQL的学习》中的数据。
环境MySQL5.7,workbench。
2. 历程
也不知道怎么回事儿,在视图这一节,突然就想明白了联结。
所谓的表的联结,其实就是通过两个表中相同的主键值,来将两个表的信息放到一个表中。或者多个表的信息放到一个表中。
而我们这里所要说的视图,就相当于把联结的表保存下来了,在别处的查询中我可以使用视图。说白了,视图,就是一个表,不过,是我们由源数据组成的表加工出来的表。
这也说明了,视图是实时更新的,因为它是由查询得到的。
3. 视图
3.1 创建视图
USE test; #用必知必会d的数据创建的数据库
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;
创建视图时,需要注意视图的可重复使用性;
你可以注意到,通过创建视图,我们可以很好地降低联结的复杂性,从而简化联结及查询。
3.2 删除视图
DROP VIEW ProductCustomers;
3.3 格式化检索数据
上面我们说了,视图的本质其实就是一个表,或者说一个查询结果,因此当我们需要重复使用某一种格式的数据的时候,我们可以通过视图来创建一个格式化后的表。
USE test;
CREATE VIEW Vendorlocations AS
SELECT CONCAT(RTRIM(vend_name),'(',RTRIM(vend_country),')' )#具体请查看“连接”
AS vend_title
FROM vendors; #创建视图
SELECT * FROM Vendorlocations; #查看
3.4 视图过滤
因为是一种查询结果,显而易见,它也可以使用where子句。
CREATE VIEW CustomerEmaillist AS
SELECT cust_id,cust_name,cust_email
FROM customers
WHERE cust_email IS NOT NULL; #过滤没有电子邮件地址的顾客。
SELECT * FROM CustomerEmaillist;
3.5 计算字段
CREATE VIEW zongjia AS
SELECT
order_num,
prod_id,
quantity,
item_price,
quantity * item_price AS expanded_price #进行计算
FROM orderitems;
SELECT * FROM zongjia WHERE order_num = 20008;
所以说,就我目前看来(初学),我觉得SELECT能做的,视图都可以。
用书上总结的话来说:
- 视图是虚拟的表。
- 它是一种SELECT语句的封装,从而简化数据处理,格式化,进而达到保护基础数据的目的。