一个案例理解mysql视图

目录

一、什么是视图?

二、案例问题

三、案例数据准备

四、普通查询与视图查询

五、使用视图须知

六、总结


一、什么是视图?

        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

       

六、总结

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值