SQL必知必会
陈旸
清华大学计算机博士
立即订阅
10179 人已学习
课程目录
已完结 49 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词丨SQL可能是你掌握的最有用的技能
免费
第一章:SQL语法基础篇 (19讲)
01丨了解SQL:一门半衰期很长的语言
02丨DBMS的前世今生
03丨学会用数据库的方式思考SQL是如何执行的
04丨使用DDL创建数据库&数据表时需要注意什么?
05丨检索数据:你还在SELECT * 么?
06丨数据过滤:SQL数据过滤都有哪些方法?
07丨什么是SQL函数?为什么使用SQL函数可能会带来问题?
08丨什么是SQL的聚集函数,如何利用它们汇总表的数据?
09丨子查询:子查询的种类都有哪些,如何提高子查询的性能?
10丨常用的SQL标准有哪些,在SQL92中是如何使用连接的?
11丨SQL99是如何使用连接的,与SQL92的区别是什么?
12丨视图在SQL中的作用是什么,它是怎样工作的?
13丨什么是存储过程,在实际项目中用得多么?
14丨什么是事务处理,如何使用COMMIT和ROLLBACK进行操作?
15丨初识事务隔离:隔离的级别有哪些,它们都解决了哪些异常问题?
16丨游标:当我们需要逐条处理数据时,该怎么做?
17丨如何使用Python操作MySQL?
18丨SQLAlchemy:如何使用Python ORM框架来操作MySQL?
19丨基础篇总结:如何理解查询优化、通配符以及存储过程?
第二章:SQL性能优化篇 (18讲)
20丨当我们思考数据库调优的时候,都有哪些维度可以选择?
21丨范式设计:数据表的范式有哪些,3NF指的是什么?
22丨反范式设计:3NF有什么不足,为什么有时候需要反范式设计?
23丨索引的概览:用还是不用索引,这是一个问题
24丨索引的原理:我们为什么用B+树来做索引?
25丨Hash索引的底层原理是什么?
26丨索引的使用原则:如何通过索引让SQL查询效率最大化?
27丨从数据页的角度理解B+树查询
28丨从磁盘I/O的角度理解SQL查询的成本
29丨为什么没有理想的索引?
30丨锁:悲观锁和乐观锁是什么?
31丨为什么大部分RDBMS都会支持MVCC?
32丨查询优化器是如何工作的?
33丨如何使用性能分析工具定位SQL执行慢的原因?
34丨答疑篇:关于索引以及缓冲池的一些解惑
35丨数据库主从同步的作用是什么,如何解决数据不一致问题?
36丨数据库没有备份,没有使用Binlog的情况下,如何恢复数据?
37丨SQL注入:你的SQL是如何被注入的?
第三章:认识DBMS (7讲)
38丨如何在Excel中使用SQL语言?
39丨WebSQL:如何在H5中存储一个本地数据库?
40丨SQLite:为什么微信用SQLite存储聊天记录?
41丨初识Redis:Redis为什么会这么快?
42丨如何使用Redis来实现多用户抢票问题
43丨如何使用Redis搭建玩家排行榜?
44丨DBMS篇总结和答疑:用SQLite做词云
第四章:SQL项目实战 (3讲)
45丨数据清洗:如何使用SQL对数据进行清洗?
46丨数据集成:如何对各种数据库进行集成和转换?
47丨如何利用SQL对零售数据进行分析?
结束语 (1讲)
结束语 | 互联网的下半场是数据驱动的时代
SQL必知必会
登录|注册

12丨视图在SQL中的作用是什么,它是怎样工作的?

陈旸 2019-07-08
我们之前对 SQL 中的数据表查询进行了讲解,今天我们来看下如何对视图进行查询。视图,也就是我们今天要讲的虚拟表,本身是不具有数据的,它是 SQL 中的一个重要概念。从下面这张图中,你能看到,虚拟表的创建连接了一个或多个数据表,不同的查询应用都可以建立在虚拟表之上。
视图一方面可以帮我们使用表的一部分而不是所有的表,另一方面也可以针对不同的用户制定不同的查询视图。比如,针对一个公司的销售人员,我们只想给他看部分数据,而某些特殊的数据,比如采购的价格,则不会提供给他。
刚才讲的只是视图的一个使用场景,实际上视图还有很多作用,今天我们就一起学习下。今天的文章里,你将重点掌握以下的内容:
什么是视图?如何创建、更新和删除视图?
如何使用视图来简化我们的 SQL 操作?
视图和临时表的区别是什么,它们各自有什么优缺点?

如何创建,更新和删除视图

视图作为一张虚拟表,帮我们封装了底层与数据表的接口。它相当于是一张表或多张表的数据结果集。视图的这一特点,可以帮我们简化复杂的 SQL 查询,比如在编写视图后,我们就可以直接重用它,而不需要考虑视图中包含的基础查询的细节。同样,我们也可以根据需要更改数据格式,返回与底层数据表格式不同的数据。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《SQL必知必会》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(52)

  • asdf100
    视图的底层原理是什么?执行一个查询语句是会有哪些操作步骤?

    作者回复: 一个视图其实是SELECT语句的集合,执行时会提前编译好,可以反复使用。在底层执行顺序的时候和SELECT语句是一样:
    1、FROM子句组装数据
    2、WHERE子句进行条件筛选
    3、GROUP BY分组
    4、使用聚集函数进行计算;
    5、HAVING筛选分组;
    6、计算所有的表达式;
    7、SELECT 的字段;
    8、ORDER BY排序
    9、LIMIT筛选

    2019-07-08
    21
  • 悟空
    视图的作用:

    1、视图隐藏了底层的表结构,简化了数据访问操作,客户端不再需要知道底层表的结构及其之间的关系。

    2、视图提供了一个统一访问数据的接口。(即可以允许用户通过视图访问数据的安全机制,而不授予用户直接访问底层表的权限),从而加强了安全性,使用户只能看到视图所显示的数据。
    3、视图还可以被嵌套,一个视图中可以嵌套另一个视图。
    注意:视图总是显示最新的数据!每当用户查询视图时,数据库引擎通过使用视图的 SQL 语句重建数据。
    2019-07-08
    9
  • 一叶知秋
    优点:在总结中有写,安全、清晰 。
    缺点:的话感觉就是如果需要额外的字段就需要更新视图吧...(感觉说的也不对

    更新视图对基本表数据有影响。(比如update视图实际上就是对基本表的更新操作)
    证明如下:
    mysql> select * from team_score;
    +---------+-----------+-----------+--------------+--------------+------------+
    | game_id | h_team_id | v_team_id | h_team_score | v_team_score | game_date |
    +---------+-----------+-----------+--------------+--------------+------------+
    | 10001 | 1001 | 1002 | 102 | 111 | 2019-04-01 |
    | 10002 | 1002 | 1003 | 135 | 134 | 2019-04-10 |
    +---------+-----------+-----------+--------------+--------------+------------+
    2 rows in set (0.00 sec)

    mysql> create view h_team_score as select game_id, h_team_score from team_score;
    Query OK, 0 rows affected (0.01 sec)

    mysql> update h_team_score set h_team_score=103 where game_id=10001;
    Query OK, 1 row affected (0.01 sec)
    Rows matched: 1 Changed: 1 Warnings: 0

    mysql> select * from team_score;
    +---------+-----------+-----------+--------------+--------------+------------+
    | game_id | h_team_id | v_team_id | h_team_score | v_team_score | game_date |
    +---------+-----------+-----------+--------------+--------------+------------+
    | 10001 | 1001 | 1002 | 103 | 111 | 2019-04-01 |
    | 10002 | 1002 | 1003 | 135 | 134 | 2019-04-10 |
    +---------+-----------+-----------+--------------+--------------+------------+
    2 rows in set (0.00 sec)
    2019-07-08
    2
    5
  • Geek_weizhi
    本文章对我帮助很大!

    作者回复: 谢谢!

    2019-07-13
    4
  • cricket1981
    视图都是只读的吗?
    2019-07-08
    4
  • 化作春泥
    用视图查询效率比直接sql连接查询,效率怎么样?
    2019-07-08
    3
    4
  • 极客星星
    你好 想问下 当我接到一个需求时 我可以创建一个新表来实现 也可以创建一个视图来实现 这两种之间应该如何做选择呢
    2019-07-09
    1
    3
  • 一步
    视图我的理解是对 SQL 查询语句的提前封装,不保存数据。所以更新视图的时候,只是更新提前封装好的查询语句,不会影响到数据表
    2019-07-08
    3
  • Sam
    视图可以理解成给一个查询SQL起个别名,以后想执行同样的SQL,就不需要每次都输入同样的SQL文本,只需要查询视图就可以了;
    当然视图也有特殊的功能,比如权限控制,通过视图只开发特定的列的查询权限给其他人,还有物化视图。
    2019-07-09
    2
  • 可是工作中我们实际都是将权限控制放到了代码层面去控制的,希望老师也能讲解下物化视图和普通视图区别及底层原理。
    2019-07-08
    2
  • 爱思考的仙人球
    视图的优点是隔绝数据表操作,可以对不同的用户提供不同的结果集,让用户只看到自己该看到的内容;缺点是灵活性差,有时候可能缺少想看的数据。
    2019-10-17
    1
  • Monday
    是不是可以这样理解,在查看sql的执行计划时,试图换成创建的脚本就行(select 后面部分)
    2019-08-07
    1
  • heliu
    我觉得视图类似于封装编程中的输出函数.
    2019-07-26
    1
  • 假装自己不胖
    视图在什么时候创建?在初始化的时候?什么时候消失?只要在drop的时候才会失效吗?如果是这样,那和表的区别也就不大了,虚拟表和真表有什么区别?
    2019-07-15
    1
  • muofeng
    想问一个刚刚发现的问题,使用过滤条件"between...and...",一般会包含边界的数值吗?我试了一下"SELECT * FROM player_height_grades WHERE height BETWEEN 1.91 AND 2.08;",发现过滤出来的数值没有包含前面的1.91,但是包含了2.08。我用的数据库版本为mysql 8.0.13。
    2019-07-09
    1
  • 王加武
    视图的作用
    对SQL的语句进行封装,提高SQL的复用率
    可以完成复杂的连接
    可以对数据进行格式化操作
    简洁高效

    视图是一张虚拟表,所以更新数据的时候并不会对实际的表产生影响
    2019-12-12
  • 暮雨
    视图查询效率很低
    2019-11-21
  • Aggi
    利用视图查询时,是不是直接利用的是视图的结果去查询的?还是说每次查询中用的视图的地方都要重新更新视图的结果再查询的?
    2019-11-13
  • Aggi
    视图+SQL查询 是不是比单纯的一条sql查询的性能呢要好呢?
    2019-11-13
  • Victor.
    每次打开视图是的时候,是不是想当于运营一个sql,视图的数据是否占用存储空间?
    如果占用空间,那么视图作为一个虚拟表它占用的是内存空间,还是磁盘空间?
    如果是内存空间,那么我每次运行的时候都需要查找一遍,对于服务器的资源占用很大?
    如果仅作为一个sql的封装,调用视图我是否可以理解为,它首先得执行本身视图的sql,然后在能输出,简洁在sql上,然而对于服务器计算压力并没有缓解?
    2019-11-11
收起评论
52
返回
顶部