一、视图
1、视图的作用
视图是一种虚拟表,我们可以把一段查询语句作为视图存储在数据库中,在需要的时候,可以把视图看做一个表, 对里面的数据进行查询。
创建视图语法结构:
CREATE [OR REPLACE]
VIEW 视图名称[(字段列表)]
AS 查询语句
现在,假设我们要查询一下商品的每日销售明细,这就要从销售流水表(demo.mytrans) 和商品信息表(demo.goodmaster)中获取到销售数据和对应的商品信息数据:
销售流水表(mytrans):
商品信息表(goodmaster):
在不使用视图的情况下,我们可以通过对销售流水表和商品信息表进行关联查询,得到每天商品销售统计的结果,包括销售日期、商品名称、每天销售数量的合计和每天销售金额的合计,如下所示:
SELECT
a.transdate,
a.itemnumber,
b.goodsname,
SUM(a.salesquantity) AS quantity, -- 统计销售数量
SUM(a.salesvalue) AS salesvalue -- 统计销售金额
FROM
demo.mytrans AS a
LEFT JOIN -- 连接查询
demo.goodmaster AS b ON (a.itemnumber = b.itemnumber)
GROUP BY a.transdate , a.itemnumber;
在实际项目中,我们发现,每日商品销售查询使用的频次很高,而且经常需要以这个查询的结果为基础,进行更进一步的统计。
举个例子,超市经营者要查一下“每天商品的销售数量和当天库存数量的对比”,如果用一个SQL语句查询,就会比较复杂。历史库存表(inventoryhist)如下所示:
接下来我们的查询步骤会使用到子查询和派生表
- 子查询:就是嵌套在另一个查询中的查询。
- 派生表:如果我们在查询中把子查询的结果作为一个表来使用,这个表就是派生表。
这个查询的具体步骤是:
- 通过子查询获得单品销售统计的查询结果;
- 把第一步中的查询结果作为一个派生表,跟历史库存表进行连接,查询获得包括销售日期、商品名称、销售数量和历史库存数量在内的最终结果。
SELECT
a.transdate,
a.itemnumber,
a.goodsname,
a.quantity, -- 获取单品销售数量
b.invquantity -- 获取历史库存数量
FROM
(SEL