ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

mysql一个案例理解视图

2022-01-11 20:30:12  阅读:190  来源: 互联网

标签:name 视图 查询 案例 mysql 讲师 id select


目录

一、什么是视图?

二、案例问题

三、案例数据准备

四、普通查询与视图查询

五、使用视图须知

六、总结


一、什么是视图?

        mysql的视图是一个虚拟存在的表,它既有着真实存在表的功能,又不占用空间,视图又可以认为是特定的sql语句。视图的存在其实就是帮助我们达到快速查找我们想要的内容。那么问题来了,为什么我说视图又可以认为是特定的sql语句呢?下面一个案例解释一下。

二、案例问题

        举个例子,现在有三张表:student、teacher、course三张表,分别代表的是学生信息表、讲师信息表、课程信息表。好,那么问题来了,如果我们想看到张三同学的讲师以及课程信息,这时我们需要关联三张表去做查询。当然如果这个查询动作是n次的。也就是说这次这个老师要查询张三的信息,下次那个老师要查询李四的信息。我们不难想象这样存在的不便是需要每次重复写sql去做关联查询。这时候使用mysql的视图功能就能达到事半功倍的效果。

三、案例数据准备

        针对上述案例,我们需要达到的目的是一次检索,不要那么多重复的动作。假设三张表中的数据如下所示:(建表及sql语句可以看这边博客:mysql基础语句增删改查

                假设student表数据如下:

s_ids_namet_id
1张三3
2李四1
3王五2

                其中:s_id为学生id、s_name为学生姓名、t_id为学生的讲师id(与讲师表中t_id对应)

                

                假设teacher表数据如下:

t_idt_namec_id
1张老师1
2李老师2
3王老师3

                其中:t_id为讲师id、t_name为讲师姓名、c_id为讲师所教课程id(与课程表中c_id对应)

                

                假设course表数据如下:

c_idc_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

       

六、总结

        关于视图的操作(删改查),后续会专门再记录一篇。

标签:name,视图,查询,案例,mysql,讲师,id,select
来源: https://blog.csdn.net/zkkkkkkkkkkkkk/article/details/122437015

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有