视图是虚拟的表。与包含数据的表不一样,视图是包含查询语句。
MySQL 从版本 5 开始支持视图。
视图的存在主要是为了简化复杂的查询。
例如我们要查询订购了某种产品的顾客,SQL 语句如下:
SELECT
cust_name,
cust_contact
FROM
customers c
JOIN orders o ON c.cust_id = o.cust_id
JOIN orderitems oi ON oi.order_num = o.order_num
WHERE
oi.prod_id = 'BR01';
这种复杂的查询需要查询人员非常熟悉表的结构,知道如何连接表以及如何创建查询。
视图的存在就是为了简化复杂的查询。例如,我们可以创建如下视图:
CREATE VIEW productcustomers AS
SELECT
cust_name,
cust_contact,
prod_id
FROM
customers c
JOIN orders o ON c.cust_id = o.cust_id
JOIN orderitems oi ON oi.order_num = o.order_num
接下来我们便可以利用这个视图来查询订购了商品 BR01 的客户。
SELECT
cust_name,
cust_contact
FROM
productcustomers
WHERE
prod_id = 'BR01';
上述查询比原来的查询简单了好多,对表结构不熟悉同样可以进行查询。
在简化计算字段的使用上,视图也很有用。
例如:我们要查询某个订单的总金额。
SELECT
order_num,
SUM(quantity * item_price) total
FROM
OrderItems
WHERE
order_num = 20005;
我们同样可以创建一个视图来简化查询。
CREATE VIEW total AS
SELECT
order_num,
SUM(quantity * item_price) total_price
FROM
OrderItems
GROUP BY
order_num;
创建完视图后,我们的查询可以写成如下形式:
SELECT
order_num,
total_price
FROM
total
WHERE
order_num = 20005;
视图为虚拟的表。它们包含的不是数据而是根据需要检索数据的查询。 视图提供了一种封装 SELECT
语句的层次,可用来简化数据处理, 保护基础数据。
备注:示例中用到的表和数据可以通过链接(https://github.com/songw/sql)下载。
本系列目录:零基础入门 SQL 系列之(一)查询数据
零基础入门 SQL 系列之(二)排序
零基础入门 SQL 系列之(三)过滤数据
零基础入门 SQL 系列之(四)内置函数
零基础入门 SQL 系列之(五)数据汇总
零基础入门 SQL 系列之(六)表连接
零基础入门 SQL 系列之(七)组合
零基础入门 SQL 系列之(八)插入、更新、删除
零基础入门 SQL 系列之(九)创建和操作表
零基础入门 SQL 系列之(十)视图