美文网首页
25、视图详解及表的关系

25、视图详解及表的关系

作者: 小碧小琳 | 来源:发表于2018-12-16 15:17 被阅读0次

一、视图 view

在查询中,我们经常把查询结果,当成临时表来看。
view就可以看成是一张虚拟的表。是表通过某种运算得到的一个投影。

1.1、引出视图

场景1:

现要求查询每个栏目下,商品的平均价格,并取平均价前3高的栏目。

解法1:不知道视图的情况下
求得平均价格,然后group_by cat_id ,然后order by avg,然后limit再取前3条。

场景2:

要取平均价格由高到低,第3到第5名的栏目

场景3:

查出前3低的栏目。上面两种情况,都要用到临时的结果集A

对于上面两个场景,为了方便,我们想到把临时的结果集A存储到内存中,方便以后查询。

难点:

如果过一段时间,又添加了几个商品,价格很高或很低,影响到了平均价格。那么A的结果集与前面保存的表的结果就不一样了,这时候应该怎么办?

用视图来解决。

1.2、视图

1.2.1、创建视图

视图中没有真实数据,就是表通过运算得到的投影(表发生变化的时候,视图也就会发生相应的变化)

问:如何创建视图?
问:建立视图的时候,我们需要指定视图的列名与列类型吗?
答:不需要,视图只是表的影子,继承了上面表的字段。

既然视图只是表的某种查询的投影,所以主要步骤在查询表上。
查询的结果命名为视图就可以了。

1.2.2、创建视图语法:

create view 视图名
as
select 语句

1.3、用视图解决上面的问题

1.3.1、创建视图stats

相对于上面的例题,我们创建一个平均价格的视图stats

这时候,show tables ,发现多了一个table,就是stats。然后查看stats中的数据:

就跟我们刚才创建的那个临时结果集A是一样的。(但是这个只是投影,并不是实实在在的数据)

1.3.2、利用视图查询得到结果

视图一旦创建完毕,就可以当做一个表了。比如这里我们查询前3高的平均价格cat_id

1.4、视图的作用:

1、可以简化我们的查询

比如,复杂的统计时,先用视图生成一个中间结果,再查询视图

2、更精细的权限控制

以表为例。
两个网站搞合作,可以查询对方网站的用户,需要向对方开放用户的权限,但是又不想开放用户表中的密码字段。应该怎么解决?

可以创建一个视图,包含所有的字段,但是就不包含密码字段,然后开放视图的权限给对方。

3、数据多,分表时可以用到

比如说,有小说站,小说存储在novel表中,1000多万篇
数据分别存储在novel1,novel2,novel3,novel4,novel5中。
查询小说时,不知道在哪张表,怎么办?

这时候可以用union连接把所有的表都连接起来,并把结果当做一个视图,然后在这个视图中查询。(就不需要在每个表中查询一次了)

1.5、表与视图变化之间的相互影响

1.5.1、表变化,视图会怎样?

比如对于当前视图stats

此时查询15号栏目下的商品,

发现stats中的平均价格是正确的。

此时我们如果改变good的一个价格

good1

发现视图中的平均价格也随之改变了

stats1

表变化,视图会随之改变。

1.5.2、视图变了,表会如何?

1.5.3、情况1

对于上面的视图stats1中,cat_id=15的情况,如果我们把平均价格pj改成了90,那么此时表会不会变?
应该不会变,因为视图是根据表good1来的,平均值多了10,反推过去,你是没法确定原来的两个good价格95与65是怎样修改导致平均值增加的。

1.5.4、情况2

这张视图,数据表示的是最贵的5个商品。那么此时视图能不能改呢?

此时,增、删、改也是不能实现的。(详情可以观看p39)

疑问:那么视图到底能否修改呢?

1.5.5、情况3

我们创建一个视图,是cat_id=4的栏目商品的投影,然后试着对视图做修改。

执行删除操作:

我们发现good_id=1的商品被删除掉了,然后表中的商品也被删掉了。

1.5.6、总结

于是,我们得出结论,在某种情况下,视图也是可以修改的。
修改条件:视图的数据跟表的数据一一对应,就像函数的映射。
由表中数据能对应到视图,
由视图能对应到表。


具体能不能修改的情况,可以去看手册。
比如order by limit就不能修改。


1.6、视图占用空间吗

视图的定义是一直存在的,但是视图是不占用空间的,里面并不存储数据。

删除视图,跟删除表的语法是一样的。

相关文章

  • 25、视图详解及表的关系

    一、视图 view 在查询中,我们经常把查询结果,当成临时表来看。view就可以看成是一张虚拟的表。是表通过某种运...

  • GeekBand~iOS~实战入门~第三周

    TableView 1.表视图组成及相关概念 1.表头视图(table header view)。表视图最上边的视...

  • 建表原则,视图

    建表原则 一对多的关系建表 多对多的关系建表原则 主键,外键 约定优于配置:约定好规则 视图 视图即虚表,实际上就...

  • 二、数据库视图view

    一、视图的定义及作用 定义视图是从若干基本表和(或)其他视图构造出来的表。 在创建一个视图时,只是存放的视图的定义...

  • 54 SQL中的视图和触发器

    为什么要有视图 视图和基本表的关系 练习 SQL视图 视图的建立和删除 视图插入数据 视图数据的删改 如果视图中存...

  • swift 4.2代码实现表视图UITableView

    表视图的组成 表头视图: 表视图最上边的视图,用于展示表视图的信息,也可以放搜索栏 表脚视图: 表视图最下边的视图...

  • SAP-MM模块业务

    业务操作详解与详细流程。您就是业务之神? 物料主数据_销售视图 MM模块相关透明表收集 SAP MM模块相关透明表...

  • Apache Phoenix学习记录(SQL on HBase)

    1 使用概述 2 环境配置 3 SQL特性详解 1)create:可以创建一张表或视图。表名如果没有用双引号括起来...

  • 关系数据库

    笛卡尔 关系类型 1基本表 2视图表 3查询表 临时表、不存在实际介质中

  • 切片器制作动态图表

    power pivot 创建关联并创建区域层级关系image.png 创建透视表和透视图,并分别为透视表和透视图创...

网友评论

      本文标题:25、视图详解及表的关系

      本文链接:https://www.haomeiwen.com/subject/dztxkqtx.html