视图

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能做的,视图都可以。
用书上总结的话来说:

  1. 视图是虚拟的表。
  2. 它是一种SELECT语句的封装,从而简化数据处理,格式化,进而达到保护基础数据的目的。
posted @ 2017-05-17 22:52  我的前进日志  阅读(237)  评论(0编辑  收藏  举报