mysql之视图

2022-03-24  本文已影响0人  每天进步一点点变成更好的自己

mysql之视图,如何简化查询。视图建议只用于查询就可以了,不要进行增加、删除、修改,因为他所有的修改都是针对源表的。

视图: 一个虚拟表,把有一段查询语句作为视图存储在数据库中。对视图进行增删改查,实际都是通过对实际数据表的操作来实现。

视图-语法结构:

创建视图:
CREATE [OR REPLACE]
VIEW 视图名称 [(字段列表)]
AS 查询语句

修改视图:
ALTER VIEW 视图名
AS 查询语句;

查看视图:
DESCRIBE 视图名;

删除视图:
DROP VIEW 视图名;

举例说明,直接查询表和创建视图后查询的优势:

直接查询表:
mysql> SELECT
-> a.transdate,
-> a.itemnumber,
-> a.goodsname,
-> a.quantity,       -- 获取单品销售数量
-> b.invquantity     -- 获取历史库存数量
-> FROM
-> (SELECT           -- 子查询,统计单品销售         
-> a.transdate,
-> a.itemnumber,
-> b.goodsname,
-> SUM(a.quantity) AS quantity,
-> SUM(a.salesvalue) AS salesvalue
-> FROM
-> demo.trans AS a
-> LEFT JOIN demo.goodsmaster AS b ON (a.itemnumber = b.itemnumber)
-> GROUP BY a.transdate , a.itemnumber
-> ) AS a -- 派生表,与历史库存进行连接
-> LEFT JOIN
-> demo.inventoryhist AS b
-> ON (a.transdate = b.invdate
-> AND a.itemnumber = b.itemnumber);
+---------------------+------------+-----------+----------+-------------+
| transdate | itemnumber | goodsname | quantity | invquantity |
+---------------------+------------+-----------+----------+-------------+
| 2020-12-01 00:00:00 | 1 | 本 | 1.000 | 100.000 |
| 2020-12-01 00:00:00 | 2 | 笔 | 1.000 | 99.000 |
| 2020-12-02 00:00:00 | 3 | 胶水 | 2.000 | 200.000 |
+---------------------+------------+-----------+----------+-------------+
3 rows in set (0.00 sec)

创建视图:
 mysql> CREATE VIEW demo.trans_goodsmaster AS  -- 创建视图
-> SELECT
-> a.transdate,
-> a.itemnumber,
-> b.goodsname,                           -- 从商品信息表中获取名称
-> SUM(a.quantity) AS quantity,           -- 统计销售数量
-> SUM(a.salesvalue) AS salesvalue        -- 统计销售金额
-> FROM
-> demo.trans AS a
-> LEFT JOIN
-> demo.goodsmaster AS b ON (a.itemnumber = b.itemnumber) -- 与商品信息表关联
-> GROUP BY a.transdate , a.itemnumber;   -- 按照销售日期和商品编号分组
Query OK, 0 rows affected (0.01 sec)

直接查询视图:
mysql> SELECT *                 -- 直接查询
-> FROM demo.trans_goodsmaster; -- 视图
+---------------------+------------+-----------+----------+------------+
| transdate | itemnumber | goodsname | quantity | salesvalue |
+---------------------+------------+-----------+----------+------------+
| 2020-12-01 00:00:00 | 1 | 本 | 1.000 | 89.00 |
| 2020-12-01 00:00:00 | 2 | 笔 | 1.000 | 5.00 |
| 2020-12-02 00:00:00 | 3 | 胶水 | 2.000 | 20.00 |
+---------------------+------------+-----------+----------+------------+
3 rows in set (0.01 sec)

image.png
上一篇 下一篇

猜你喜欢

热点阅读