MySQL数据库,详解视图,高手必备(一)
需求背景
电商公司领导说:给我统计⼀下:当⽉订单总⾦额、订单量、男⼥订单占⽐等信息,我们
啪啦啪啦写了⼀堆很复杂的sql,然后发给领导。
这样⼀⼤⽚sql,发给领导,你们觉得好么?
如果领导只想看其中某个数据,还需要修改你发来的sql,领导⽇后想新增其他的统计指
标,你又会发送⼀⼤坨sql给领导,对于领导来说这个sql看起来很复杂,难以维护。
实际上领导并不关⼼你是怎么实现的,他关⼼的只是这些指标,并且⽅便查看、查询,⽽
你却把复杂的实现都发给了领导。
那我们有什么办法隐藏这些细节,只暴露简洁的结果呢?
数据库已经帮我们想到了:使⽤视图来解决这个问题。
什么是视图
概念
视图是在mysql5之后出现的,是⼀种虚拟表,⾏和列的数据来⾃于定义视图时使⽤的⼀
些表中,视图的数据是在使⽤视图的时候动态⽣成的,视图只保存了sql的逻辑,不保存
查询的结果。
这是Mysql系列第15篇。
环境:mysql5.7.25,cmd命令中进⾏演⽰。使⽤场景
多个地⽅使⽤到同样的查询结果,并且该查询结果⽐较复杂的时候,我们可以使⽤视图来
隐藏复杂的实现细节。案例1
查询姓名中包含a字符的员⼯名、部门、⼯种信息
/*案例1:查询姓名中包含a字符的员⼯名、部门、⼯种信息*/
/*①创建视图myv1*/
CREATE VIEW myv1
AS
SELECT
t1.last_name,
t2.department_name,
t3.job_title
FROM employees t1, departments t2, jobs t3
WHERE t1.department_id = t2.department_id
AND t1.job_id = t3.job_id;
/*②使⽤视图*/
SELECT * FROM myv1 a where a.last_name like 'a%';
效果如下:
mysql> SELECT * FROM myv1 a where a.last_name like 'a%';
+-----------+-----------------+----------------------+
| last_name | department_name | job_title |
+-----------+-----------------+----------------------+
| Austin | IT | Programmer |
| Atkinson | Shi | Stock Clerk |
| Ande | Sal | Sales Representative |
| Abel | Sal | Sales Representative |
+-----------+-----------------+----------------------+
4 rows in set (0.00 sec)
上⾯我们创建了⼀个视图:myv1,我们需要看员⼯姓名、部门、⼯种信息的时候,不⽤关
⼼这个视图内部是什么样的,只需要查询视图就可以了,sql简单多了。
案例2
案例2:查询各部门的平均⼯资级别/*案例2:查询各部门的平均⼯资级别*/
/*①创建视图myv1*/
CREATE VIEW myv2
AS
SELECT
t1.department_id 部门id,
t1.ag 平均⼯资,
t2.grade_level ⼯资级别
FROM (SELECT
department_id,
AVG(salary) ag
FROM employees
GROUP BY department_id)
t1, job_grades t2
WHERE t1.ag BETWEEN t2.lowest_sal AND t2.highest_sal;
/*②使⽤视图*/
SELECT * FROM myv2;
效果:
mysql> SELECT * FROM myv2;
+----------+--------------+--------------+
| 部门id | 平均⼯资 | ⼯资级别 |
+----------+--------------+--------------+
| NULL | 7000.000000 | C |
| 10 | 4400.000000 | B |
| 20 | 9500.000000 | C |
| 30 | 4150.000000 | B |
| 40 | 6500.000000 | C |
| 50 | 3475.555556 | B |
| 60 | 5760.000000 | B |
| 70 | 10000.000000 | D |
| 80 | 8955.882353 | C |
| 90 | 19333.333333 | E |
| 100 | 8600.000000 | C |
| 110 | 10150.000000 | D |
+----------+--------------+--------------+
12 rows in set (0.00 sec)
相关文章
- 数据孤岛是业务效率的无声杀手
- 2023展望:新的一年将给大数据分析领域带来什么?
- 阿里云ADB基于Hudi构建Lakehouse的实践
- 大数据在医疗保健领域的使用案例
- 微软增加说明:KB5021751 更新扫描已经 / 即将过时 Office 过程中不会触碰用户隐私
- 2022 Gartner全球云数据库管理系统魔力象限发布 腾讯云数据库入选
- 场景化、重实操,分享一个实时数仓实践案例
- Arctic的湖仓一体践行之路
- 分布式计算MapReduce究竟是怎么一回事?
- 淘系数据模型治理优秀实践
- 大数据分析对医疗保健的影响
- 当我们说大数据Hadoop,究竟在说什么?
- 2022年及以后大数据的五个发展趋势
- 网易严选离线数仓治理实践
- 2023 年数据治理趋势
- 一份“靠谱”的年度经营计划,你学会了吗?
- 漫谈对大数据的思考
- 测试一下,读懂数据的能力,你有吗?
- 用艺术的眼光探索数据之美
- 聊聊数据分析成果如何落地