视图

视图也就是虚拟表, 本身不具备数据, 是SQL中的一个变红要概念. 如图

视图可以帮助我们使用表的一部分, 而不是所有的表, 另一方面可以针对不同的用户制定不同的查询视图.

创建, 更新与删除视图

视图作为一张虚拟表, 帮我们封装了底层与数据表的接口. 相当于是一张表或多张表的数据结果集. 视图的这个特点, 可以帮我们简化复杂的SQL查询, 并且可以重用.

创建视图

创建视图的语法是:

CREATE VIEW view_name AS
SELECT column1, column2
FROM table
WHERE condition

view_name表示视图名, column1等表示列名, condition表示查询过滤条件.

以前面的NBA球员数据表为例, 查询比NBA球员平均身高高的球员有哪些, 显示球员ID和身高:

CREATE VIEW player_height AS
SELECT player.player_id, player.height
FROM player
WHERE player.height > (SELECT AVG(height) FROM player); select * from player_height; // 视图是虚拟表, 可以直接使用查询语句进行查询

嵌套视图

嵌套视图的概念就是在视图中使用视图, 比如在前视图的基础上, 我想继续查询比视图表中球员平均身高高的球员信息(实际上并没有这些需求, 这里仅仅是举个例子):

CREATE VIEW player_above_height AS
SELECT player_id, height
FROM player
WHERE height > (SELECT AVG(height) FROM player_height);

注意的是可以再condition中使用虚拟表, 但是在前面的SELECT中必须是实体表, 不能是虚拟表, 这个需要注意一下.

修改视图

修改视图的语法是:

ALTER VIEW view_name AS
SELECT column1, column2
FROM table
WHERE condition

其实看上去和创建视图的语法差不多, 仅仅是将CREATE换成ALTER就可以了. 这里用前面的视图, 现在想多返回一个play_name的字段

ALTER VIEW player_height AS
SELECT player_id, player_name, height
FROM player
WHERE height > (SELECT AVG(height) FROM player);

删除视图

删除视图就很简单了

DROP VIEW view_name;

上面的例子可以看到视图是对SELECT语句进行了封装, 其实就像Java中的方法一样, 将常用的东西放在一起查询.

视图完成复杂的连接

现在创建视图来查询球员和身高等级的信息:

CREATE VIEW player_height_level AS
SELECT player.player_id, player.player_name, player.height, height_grades.height_level
FROM player, height_grades
WHERE player.height BETWEEN height_grades.height_lowest AND height_grades.height_highest;

现在可以直接在视图中查询身高介于1.90m和2.08m之间的球员信息和等级

SELECT * FROM player_height_level WHERE height BETWEEN 1.90 AND 2.08;
利用视图对数据进行格式化

现在想输出球员姓名和对应的球队, 对应的格式是player_name(team_name), 这个也可以使用视图来解决:

CREATE VIEW player_team AS
SELECT CONCAT(player_name, '(' , team.team_name , ')') AS player_team FROM player JOIN team WHERE player.team_id = team.team_id

不过说实话, 能用视图做的, 基本使用单SQL也可以完成.

视图的用户还有很多, 这里仅仅列了两个使用案例.

视图的优点
  1. 安全性:虚拟表是基于底层数据表的,我们在使用视图时,一般不会轻易通过视图对底层数据进行修改,即使是使用单表的视图,也会受到限制,比如计算字段,类型转换等是无法通过视图来对底层数据进行修改的,这也在一定程度上保证了数据表的数据安全性。同时,我们还可以针对不同用户开放不同的数据查询权限,比如人员薪酬是个敏感的字段,那么只给某个级别以上的人员开放,其他人的查询视图中则不提供这个字段。
  2. 简单清晰:视图是对 SQL 查询的封装,它可以将原本复杂的 SQL 查询简化,在编写好查询之后,我们就可以直接重用它而不必要知道基本的查询细节。同时我们还可以在视图之上再嵌套视图。这样就好比我们在进行模块化编程一样,不仅结构清晰,还提升了代码的复用率。

SQL中的视图(极客时间)的更多相关文章

  1. SQL中的连接(极客时间)

    SQL中的连接 关系型数据库的核心之一就是连接, 而在不同的标准中, 连接的写法上可能有区别, 最为主要的两个SQL标准就是SQL92和SQL99了, 后面的数字表示的是标准提出的时间. SQL92中 ...

  2. 【视频合集】极客时间 react实战进阶45讲 【更新中】

    https://up2.v.sharedaka.com/video/ochvq0AVfpa71A24bmugS5EewhFM1553702519936.mp4 01 React出现的历史背景及特性介绍 ...

  3. 极客时间 Mysql实战45讲 07讲行锁功过:怎么减少行锁对性能的影响笔记 极客时间

    极客时间 Mysql实战45讲 07讲行锁功过:怎么减少行锁对性能的影响笔记 极客时间极客时间 Mysql实战45讲 07讲行锁功过:怎么减少行锁对性能的影响笔记 极客时间 笔记体会: 方案一,事务相 ...

  4. Mysql实战45讲 06讲全局锁和表锁:给表加个字段怎么有这么多阻碍 极客时间 读书笔记

    Mysql实战45讲 极客时间 读书笔记 Mysql实战45讲 极客时间 读书笔记 笔记体会: 根据加锁范围:MySQL里面的锁可以分为:全局锁.表级锁.行级锁 一.全局锁:对整个数据库实例加锁.My ...

  5. Mysql实战45讲 05讲深入浅出索引(下)极客时间 读书笔记

    极客时间 Mysql实战45讲 04讲深入浅出索引(下)极客时间 笔记体会: 回表:回到主键索引树搜索的过程,称为回表覆盖索引:某索引已经覆盖了查询需求,称为覆盖索引,例如:select ID fro ...

  6. Mysql实战45讲 04讲深入浅出索引(上)读书笔记 极客时间

    极客时间 Mysql实战45讲 04讲深入浅出索引 极客时间(上)读书笔记  笔记体悟 1.索引的作用:提高数据查询效率2.常见索引模型:哈希表.有序数组.搜索树3.哈希表:键 - 值(key - v ...

  7. java爬虫系列第四讲-采集"极客时间"专栏文章、视频专辑

    1.概述 极客时间(https://time.geekbang.org/),想必大家都知道的,上面有很多值得大家学习的课程,如下图: 本文主要内容 使用webmagic采集极客时间中某个专栏课程生成h ...

  8. "做中学"之“极客时间”课程学习指导

    目录 "做中学"之"极客时间"课程学习指导 所有课程都可以选的课程 Java程序设计 移动平台开发 网络攻防实践 信息安全系统设计基础 信息安全专业导论 极客时 ...

  9. 左耳朵耗子:我为什么要在极客时间 App 开设独家专栏?

    参考链接:https://www.infoq.cn/article/2018/01/why-geektime 不少朋友都知道我在极客时间App 上开了一个收费专栏<左耳听风>,这个专栏会开 ...

随机推荐

  1. 4.JavaCC处理中文字符

      要使JavaCC能够处理中文首先需要将语法描述文件的options块的UNICODE_INPUT选项设置为true: options { STATIS = false; DEBUG_PARSER ...

  2. Linux(二)-- Linux配置及指令

    一.linux中常用软件的安装 yum install -y bash-completion vim lrzsz wget expect net-tools nc nmap tree dos2unix ...

  3. 关于如何清除某个特定网站的缓存---基于Chrome浏览器

    1.清除浏览器缓存 直接在浏览器设置里面清除浏览器的缓存会清除所有网站的缓存信息,这在某些时候是非常不方便的,毕竟不只有测试网站,还会有一些我们不想清除的信息也会被清除掉: 2.通过F12功能去清除浏 ...

  4. 第十七章 Metasploit Framework

    渗透测试者的困扰▪ 需要掌握数百个工具软件,上千个命令参数,实在记不住▪ 新出现的漏洞PoC/EXP有不同的运行环境要求,准备工作繁琐▪ 大部分时间都在学习使用不同工具的使用习惯,如果能统一就好了▪ ...

  5. linux学习(六)文件基本属性

    Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限.为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定. 在Linux中我们可 ...

  6. CentOs篇

    Advanced-高级配置.Security-安全.Boot-启动引导: 1.Removable Devices-移动设备 2.Hard Drive-本地硬盘 3.CD-ROM- Drive-光盘 4 ...

  7. luoguP2597 [ZJOI2012]灾难

    题意 这题思路好奇怪啊 见到有向无环图显然是要拓朴排序,不妨按照被吃向吃连边,那么\(x\)灭绝当且仅当x的入点都灭绝,于是考虑怎样x的入点都灭绝 比如4号节点,它灭绝当且仅当2和3灭绝,2和3灭绝当 ...

  8. 【BZOJ4816】[SDOI2017] 数字表格(莫比乌斯反演)

    点此看题面 大致题意: 求\(\prod_{i=1}^n\prod_{j=1}^mf(gcd(i,j))\). 推式子 首先,按照套路我们枚举\(gcd\),得到: \[\prod_{d=1}^{mi ...

  9. VS2017 无法解析的外部符号 __vscwprintf

    我是将VS2012 升级到VS2017,然后对以前的项目重新编译, 就出现了下面错误 错误 LNK2019 无法解析的外部符号 __imp__vsnprintf,该符号在函数 *******中被引用 ...

  10. Pycharm2019.2.4专业版激活

    Pycharm2019.2.4专业版激活 IDE是开发者创建程序时使用的的软件包,它通过简单的用户界面集成多个高度关联的组件,从而最大化提升编程体验和生产效率:本质上,IDE是一种改进代码创建.测试和 ...