什么是视图

视图是一个虚拟的表,不同于直接操作数据表,视图是依据SELECT语句来创建的(会在下面具体介绍),所以操作视图时会根据创建视图的SELECT语句生成一张虚拟表,然后在这张虚拟表上做SQL操作。

视图与表有什么区别

sql基础教程**第2版》用一句话非常凝练的概括了视图与表的区别---“是否保存了实际的数据”。所以视图并不是数据库真实存储的数据表,它可以看作是一个窗口,通过这个窗口我们可以看到数据库表中真实存在的数据。所以我们要区别视图和数据表的本质,即视图是基于真实表的一张虚拟的表,其数据来源均建立在真实表的基础上。

图片来源:《sql基础教程第2版》

下面这句顺口溜也方便大家记忆视图与表的关系:“视图不是表,视图是虚表,视图依赖于表”。

为什么会存在视图

那既然已经有数据表了,为什么还需要视图呢?主要有以下几点原因:

  1. 通过定义视图可以将频繁使用的SELECT语句保存以提高效率。
  2. 通过定义视图可以使用户看到的数据更加清晰。
  3. 通过定义视图可以不对外公开数据表全部字段,增强数据的保密性。
  4. 通过定义视图可以降低数据的冗余。

关联子查询

  • 什么是关联子查询

关联子查询既然包含关联两个字那么一定意味着查询与子查询之间存在着联系。这种联系是如何建立起来的呢?

我们先看一个例子:

SELECT product_type, product_name, sale_priceFROM product AS p1WHERE sale_price > (SELECT AVG(sale_price)FROM product AS p2WHERE p1.product_type = p2.product_typeGROUP BY product_type);

你能理解这个例子在做什么操作么?先来看一下这个例子的执行结果

通过上面的例子我们大概可以猜到吗,关联子查询就是通过一些标志将内外两层的查询连接起来起到过滤数据的目的,接下来我们就一起看一下关联子查询的具体内容吧。

  • 关联子查询与子查询的联系

还记得我们之前的那个例子么查询出销售单价高于平均销售单价的商品,这个例子的SQL语句如下

SELECT product_id, product_name, sale_priceFROM productWHERE sale_price > (SELECT AVG(sale_price) FROM product);

我们再来看一下这个需求选取出各商品种类中高于该商品种类的平均销售单价的商品。SQL语句如下:

SELECT product_type, product_name, sale_priceFROM product ASp1WHERE sale_price > (SELECT AVG(sale_price)FROM product ASp2WHERE p1.product_type =p2.product_typeGROUP BY product_type);

可以看出上面这两个语句的区别吗? 在第二条SQL语句也就是关联子查询中我们将外面的product表标记为p1,将内部的product设置为p2,而且通过WHERE语句连接了两个查询。

但是如果刚接触的话一定会比较疑惑关联查询的执行过程,这里有一个博客讲的比较清楚。在这里我们简要的概括为:

  1. 首先执行不带WHERE的主查询
  2. 根据主查询讯结果匹配product_type,获取子查询结果
  3. 将子查询结果再与主查询结合执行完整的SQL语句

在子查询中像标量子查询,嵌套子查询或者关联子查询可以看作是子查询的一种操作方式即可。

小结

视图和子查询是数据库操作中较为基础的内容,对于一些复杂的查询需要使用子查询加一些条件语句组合才能得到正确的结果。但是无论如何对于一个SQL语句来说都不应该设计的层数非常深且特别复杂,不仅可读性差而且执行效率也难以保证,所以尽量有简洁的语句来完成需要的功能。

天池计划task3打卡相关推荐

  1. 天池比赛TASK3打卡

    天池比赛TASK3打卡 异常值的处理 利用箱线图进行异常值的识别 利用箱线图进行异常值的识别时,其判断标准是当数据值大于箱线图的上须或下须时,即可认为这样的数据点为异常点. 所以如下表: 判断标准 结 ...

  2. NLP学习实践天池新人赛打卡第一天

    NLP学习实践天池新人赛打卡第一天 Task1 赛题理解 学习目标 赛题数据 数据标签 评测指标 数据读取 解题思路 Task1 赛题理解 赛题名称:零基础入门NLP之新闻文本分类 赛题目标:通过这道 ...

  3. 手机提醒打卡软件哪个好用 每日计划的打卡软件推荐

    在人生的不同阶段,人们会有不同的目标,为了目标可以很好地实现,可以将其分散为多个不同的小计划,并坚持不断地打卡完成每项计划,助力自己最终完成目标.那手机提醒打卡软件哪个好用些,每日计划的打卡软件推荐什 ...

  4. Datawhale task3打卡——二手车价格预测

    Datawhale task3打卡--二手车价格预测 1. 异常处理(*易忽略) 1.1 通过箱线图(或 3-Sigma)分析删除异常值 1.2 BOX-COX 转换(处理有偏分布) 1.3 长尾截断 ...

  5. 阿里天池龙珠训练营打卡2

    阿里天池龙珠训练营打卡2 文章目录 列表添加元素 删除列表中的元素 获取列表的元素 列表的一些其他方法 字符串常用内置方法 字符串格式化 列表配合集合去重 列表添加元素 list.append(obj ...

  6. 学习目标以及计划、打卡——大一下学期

    更新目标 1.英语四级拿证 2.流利阅读打卡80天反学费(已完成) 3.完成CDSN课程的学习(C/C++进阶)(已完成) 4.扇贝单词打卡学习 5.阅读3本课外书(已完成) 再次更新计划 周一: 练 ...

  7. 阿里云天池机器学习task3

    目录 Task03:复杂查询方法-视图.子查询.函数等 一.视图 二.子查询 标量子查询 关联子查询 三.实用函数 算数函数 字符串函数 日期函数 转换函数 四.谓词 LIKE谓词 – 用于字符串的部 ...

  8. 天池计划task6笔记

    下载相关创建表格和插入数据脚本 这里为了方便大家,数据脚本已经给大家准备好啦. 点击下方链接直接下载 创建数据表脚本:http://tianchi-media.oss-cn-beijing.aliyu ...

  9. CSDN超级实习生计划学习打卡—— Ipv6

    一.学习目标 理解IPv6的表示方法和地址类型 二.学习背景 在IPv4诞生的时代,是无法预见今日互联网的繁荣程度的,因此很多设计问题在发展的过程中也逐渐暴露出来,例如分类不合理,可用的公网IP地址总 ...

最新文章

  1. Styling with the DataGridColumnStyle
  2. 哪个瞬间让你突然觉得CV技术真有用?
  3. 如果用编程语言参加战争,哪门语言才是程序员的最强武器?
  4. Jquery中使用select2插件实现ajax实时请求数据
  5. vijos1055 奶牛浴场
  6. echarts版本折线图
  7. 用于语音识别的数据增强
  8. Atitit s2018 s3 doc list alldvc.docx .docx s2018 s3f doc compc s2018 s3f doc homepc sum doc dvcCom
  9. opencv的sift算法
  10. 华为交换机查看当前配置
  11. 视频教程-鼎捷易飞ERP视频教程-ERP
  12. jzxx1107字符图形6-星号倒三角
  13. 模拟退huo算法的特点_模拟退火算法(有完整实例源代码)
  14. 微信小程序开发进阶篇(mpvue)
  15. 如何在echarts地图默认的行政区(县)新增一个没有编号的区(如甘肃省天水市的区县新增一个新安区)
  16. ndows 资源管理器,windows资源管理器不见了.怎么办?
  17. wow(3) : 宏命令
  18. Win8快捷键收集大汇总
  19. 如何使用 scp 将文件夹从远程复制到本地?
  20. python画rgb渐变色_请问如何在matplotlib中画出自定义渐变色?

热门文章

  1. h5点击下载按钮,下载excel或者word
  2. Vue不能编译ES6语法的解决方案
  3. 黑马程序员7K---交通灯管理系统
  4. 实用新型专利挖掘的四个技巧。
  5. 如何创新并发出发明专利——以毕设设计电路为例
  6. java使用web3j,部署智能合约在测试链上,并调用(万字详细教程)
  7. Android打开/关闭数据流量
  8. 霍尼韦尔门禁说明书_霍尼韦尔中文说明书.doc
  9. html文本框监听粘贴,JavaScript实现复制粘贴
  10. 给echarts x y 轴 末尾加单位