mysql一个案例理解视图
2022/1/12 2:35:31
本文主要是介绍mysql一个案例理解视图,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目录
一、什么是视图?
二、案例问题
三、案例数据准备
四、普通查询与视图查询
五、使用视图须知
六、总结
一、什么是视图?
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
六、总结
关于视图的操作(删改查),后续会专门再记录一篇。
这篇关于mysql一个案例理解视图的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-02MySQL 3主集群搭建
- 2024-12-25如何部署MySQL集群资料:新手入门教程
- 2024-12-24MySQL集群部署资料:新手入门教程
- 2024-12-24MySQL集群资料详解:新手入门教程
- 2024-12-24MySQL集群部署入门教程
- 2024-12-24部署MySQL集群学习:新手入门教程
- 2024-12-24部署MySQL集群入门:一步一步搭建指南
- 2024-12-07MySQL读写分离入门:轻松掌握数据库读写分离技术
- 2024-12-07MySQL读写分离入门教程
- 2024-12-07MySQL分库分表入门详解