什么是视图

视图是一个虚拟的表,不同于直接操作数据表,视图是依据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. Spring+SpringMVC+MyBatis整合教程
  2. adb shell dumpsys 命令 查看内存
  3. Android(java)学习笔记10:同步中的死锁问题以及线程通信问题
  4. SQL语言基础:数据库语言概念介绍
  5. python 读取日志文件_如何在Python中跟踪日志文件?
  6. 【实践】预训练模型在华为信息流推荐中的应用与探索.pdf(附下载链接)
  7. tensorflow官方中文文档(各种tf函数解释,看这一篇就够了)
  8. VS2010中使用boost正则表达式库
  9. 机器学习(六):支持向量机(SVM)
  10. vscode node 乱码 非中文乱码
  11. vss服务器状态失败_VSS常犯错误(转载)
  12. 教你Word一键自动生成目录步骤
  13. 你知道吗?计算机界也有诺贝尔奖!
  14. 简单人物画像_简单的素描画人物图片
  15. 三点水加一个必须的必
  16. python判断当前时间为星期几
  17. 您需要对象吗,我帮你new一个吧?
  18. 超级计算机开采金矿,地球内部有4亿亿吨黄金,人均550万吨,为何无人敢开采?...
  19. 在bing中进行搜索,结果跳转至百度搜索,怎么解决?baidu.com bing.com后面自带莫名其妙的多余链接
  20. 第三方网站接入微信JS-SDK的分享自定义设置,微信分享小图标以及标题

热门文章

  1. 智能化煤矿-设备管理系统、故障诊断、全生命周期管理
  2. 二叉树的非递归遍历算法C语言实现(详细注释版)
  3. angular判断用户设备为移动设备还是PC
  4. #考研笔记#计算机问答题
  5. 在虚拟机中对阿克曼转向车进行导航及避障的仿真测试
  6. 【English】十月英语总结
  7. 修改文件后浏览器自动刷新解决方案
  8. 基于FPGA的串口传图SRAM缓存VGA显示
  9. 给echarts x y 轴 末尾加单位
  10. fontawesome图标字体库