当前位置:网站首页>一个案例理解mysql视图
一个案例理解mysql视图
2022-07-27 16:12:00 【zkkkkkkkkkkkkk】
目录
一、什么是视图?
mysql的视图是一个虚拟存在的表,它既有着真实存在表的功能,又不占用空间,视图又可以认为是特定的sql语句。视图的存在其实就是帮助我们达到快速查找我们想要的内容。那么问题来了,为什么我说视图又可以认为是特定的sql语句呢?下面一个案例解释一下。
二、案例问题
举个例子,现在有三张表:student、teacher、course三张表,分别代表的是学生信息表、讲师信息表、课程信息表。好,那么问题来了,如果我们想看到张三同学的讲师以及课程信息,这时我们需要关联三张表去做查询。当然如果这个查询动作是n次的。也就是说这次这个老师要查询张三的信息,下次那个老师要查询李四的信息。我们不难想象这样存在的不便是需要每次重复写sql去做关联查询。这时候使用mysql的视图功能就能达到事半功倍的效果。
三、案例数据准备
针对上述案例,我们需要达到的目的是一次检索,不要那么多重复的动作。假设三张表中的数据如下所示:(建表及sql语句可以看这边博客:mysql基础语句增删改查)
假设student表数据如下:
| s_id | s_name | t_id |
| 1 | 张三 | 3 |
| 2 | 李四 | 1 |
| 3 | 王五 | 2 |
其中:s_id为学生id、s_name为学生姓名、t_id为学生的讲师id(与讲师表中t_id对应)
假设teacher表数据如下:
| t_id | t_name | c_id |
| 1 | 张老师 | 1 |
| 2 | 李老师 | 2 |
| 3 | 王老师 | 3 |
其中:t_id为讲师id、t_name为讲师姓名、c_id为讲师所教课程id(与课程表中c_id对应)
假设course表数据如下:
| c_id | c_name |
| 1 | 语文 |
| 2 | 数学 |
| 3 | 英语 |
其中c_id为课程id、c_name为课程名称
四、普通查询与视图查询
根据案列问题,我们如果需要查询张三的信息需要关联三张表,具体sql语句如下:
select c.s_name,c.t_name,d.c_name
from
(
-- 关联学生表和讲师表,取出学生姓名、讲师姓名、课程id
select a.s_name,b.t_name,b.c_id
from
(
select s_name,t_id
from student
) a
inner join
(
select t_id,t_name,c_id
from teacher
) b
on a.t_id = b.t_id
) c
inner join
(
-- 课程表 与上述结果关联通过课程id
select c_id,c_name
from course
) d
on c.c_id=d.c_id
where c.s_name = '张三'
可以看到,如果不同讲师查询不同学生的信息,需要同上相同的重复的查询。如果使用视图的话会是怎么样的呢?我们先创建一个这样的视图。(记住我说的视图又可以看成一条sql语句)
创建上述案例视图
-- sms 为学生信息系统(student message system)首字母缩写组成
create view sms as
select c.s_name,c.t_name,d.c_name
from
(
-- 关联学生表和讲师表,取出学生姓名、讲师姓名、课程id
select a.s_name,b.t_name,b.c_id
from
(
select s_name,t_id
from student
) a
inner join
(
select t_id,t_name,c_id
from teacher
) b
on a.t_id = b.t_id
) c
inner join
(
-- 课程表 与上述结果关联通过课程id
select c_id,c_name
from course
) d
on c.c_id=d.c_id执行完上述代码后我们可以发现,创建了一张虚拟的表,将上述的结果存进去了(虚拟的并不是真正意义上的存)。这样的好处就是,如果不同的讲师查询不同学生的信息时候,我们不需要每次繁琐的拼接,只需针对这张虚拟的视图表进行查询。而查询视图也相当于执行了上述的所有代码,所以说视图也可以认为是一条sql语句。
五、使用视图须知
①:视图的命名具有唯一性
②:视图的创建数目没有限制
③:视图没有索引
④:视图可以嵌套视图
⑤:视图可以和真实的表进行join
六、总结
关于视图的操作(删改查),后续会专门再记录一篇。
边栏推荐
- Deep recognition: thesis reading_ 2s-agcn cvpr2019 (two stream adaptive graph convolution network based on skeleton action recognition)
- [mit 6.s081] LEC 4: page tables notes
- 技术分享| 快对讲综合调度系统
- 深度识别:论文阅读_2S-AGCN CVPR2019(基于骨架的动作识别的两流自适应图卷积网络)
- Mysql四种锁
- 2021.8.1笔记 数据库设计
- MySQL学习 Day1 DDL、DML、DQL基础查询
- 2. 改变颜色空间及颜色检测
- [MIT 6.S081] Lab 5: xv6 lazy page allocation
- uniapp运行到手机(真机调试)
猜你喜欢
![[MIT 6.S081] Lab 10: mmap](/img/5d/a59a6f723518553b9232bc09991075.png)
[MIT 6.S081] Lab 10: mmap
![[MIT 6.S081] Lab 6: Copy-on-Write Fork for xv6](/img/ca/e8c0827b13805c7c74cc41bf84c6ff.png)
[MIT 6.S081] Lab 6: Copy-on-Write Fork for xv6

MySQL学习 Day2 排序查询 / 聚合函数 /分组查询 /分页查询 /约束/多表之间的关系

Installation and deployment of zabbix6.0
![[MIT 6.S081] Lab 6: Copy-on-Write Fork for xv6](/img/ca/e8c0827b13805c7c74cc41bf84c6ff.png)
[MIT 6.S081] Lab 6: Copy-on-Write Fork for xv6
![[mit 6.s081] LEC 5: calling conventions and stack frames risc-v notes](/img/1f/6384f4831718477f0567540250f352.png)
[mit 6.s081] LEC 5: calling conventions and stack frames risc-v notes

Deep learning: gat

2021.7.13 note sub query

How do corporate giants such as Schneider Electric and L'Oreal make open innovation? Uncover secrets of demo World Innovation Summit

2021.7.19 notes DML
随机推荐
View port PID and end process
2021.7.12 internal and external connection of notes
2021.8.6 notes jsoup
[MIT 6.S081] Lab 9: file system
2021.7.30 note index
Deep learning - VIDEO behavior recognition: paper reading - two stream revolutionary networks for action recognition in videos
MySQL学习 Day3 多表查询 / 事务 / DCL
[MIT 6.S081] Lab 3: page tables
2021.7.12笔记 内外连接
Deep learning: GCN diagram classification case
[MIT 6.S081] Lab 11: networking
Press Google and NVIDIA! Alibaba optical 800 chip won the world's first authoritative test again
[mit 6.s081] LEC 8: page faults notes
@Convert 注解在jpa中进行查询的注意事项
Publish your own NPM component library
File path read
Binary tree concept
Uniapp has no effect on the page selector on the app side
Visual Studio Code安装教程(超详细)
浅谈AI深度学习的模型训练和推理