背景:

当我们书写一些结构相对复杂或者行数过多的SQL时,可能某个子查询在多个层级多个地方存在重复使用的情况。在 SQL 中,WITH 子句提供了一种编写辅助语句的方法,以便在更大的查询中使用。WITH 子句有助于将复杂的大型查询分解为更简单的表单,便于阅读。这些语句通常称为通用表表达式(Common Table Express, CTE),也可以当做一个为查询而存在的临时表。WITH 子句是在多次执行子查询时特别有用,允许我们在查询中通过它的名称(可能是多次)引用它。


WITH …… AS 语句运行原理

WITH AS 短语,也叫做子查询语分(subquery factoring),可以让你做很多事情,定义一个SQL片段,该SQL片段会被整个SQL语句所用到。

如果WITH AS 所定义的表名被调用两次以上,则优化器会自动将WITH AS 短语所获取的数据入入一个TEMP表里,如果只是被调用一次,则不会。而提示materialize 则是强制将WITH AS 短语里的数据放入一个全局临时表里。很多查询通过这种方法都可以提高速度。


WITH …… AS 的作用

WITH AS 子句的功能是定义SQL语句级的临时表、该临时表仅对本次执行的SQL有效。

作用:

1、可以把复杂SQL语句按照特定的业务逻辑分成几个WITH AS临时表、再用这些临时表组成完整的SQL语句,从而提高SQL语句,从而提高SQL语句的可读性和编写。

2、把一大堆重复用到的SQL语句放在with as 里面,取一个别名,后面的查询就可以用它、从而减少SQL语句的长度、从而大幅提高SQL的执行效率和可读性。

3、这种方式比创建临时表效率更高


WITH …… AS 的使用

WITH WD AS

(

SELECT car_id, sum(income) as total_income

FROM car_id_income

GROUP BY car_id

),

EM AS

(

SELECT car_name, car_id

FROM car_name_id

)

-- 将上述两张表取出汽车名称、汽车ID对应的收入

SELECT EM.car_name, WD.car_id, WD.total_income

FROM EM,WD WHERE WD.car_name = EM.car_id;


 文章最后,给大家推荐一些受欢迎的技术博客链接

  1. JAVA相关的深度技术博客链接
  2. Flink 相关技术博客链接
  3. Spark 核心技术链接
  4. 设计模式 —— 深度技术博客链接
  5. 机器学习 —— 深度技术博客链接
  6. Hadoop相关技术博客链接
  7. 超全干货--Flink思维导图,花了3周左右编写、校对
  8. 深入JAVA 的JVM核心原理解决线上各种故障【附案例】
  9. 请谈谈你对volatile的理解?--最近小李子与面试官的一场“硬核较量”
  10. 聊聊RPC通信,经常被问到的一道面试题。源码+笔记,包懂
  11. 深入聊聊Java 垃圾回收机制【附原理图及调优方法】

欢迎扫描下方的二维码或 搜索 公众号“大数据高级架构师”,我们会有更多、且及时的资料推送给您,欢迎多多交流!

使用 with as 优化SQL-深度剖析相关推荐

  1. SQL Server性能调优之执行计划深度剖析 第二节 执行计划第一次实践

    SQL Server性能调优之执行计划深度剖析 第二节 执行计划第一次实践 前言:自从上一篇文章发出之后,收到了很朋友的关注.很多朋友要求多多实践,而不是纯粹的理论.确实,从打算出这个系列开始,我就本 ...

  2. Oracle 数据库、Microsoft SQL Server、MySQL 数据库三种常见数据库的区别深度剖析

    文章目录 前言 一.ORACLE 数据库 二.Microsoft SQL Server 数据库 三.MySQL 数据库 总结 前言 Oracle 数据库.Microsoft SQL Server.My ...

  3. 最强神作 Crysis深度剖析与优化指南

    题目:最强神作!Crysis深度剖析与优化指南 作者:小熊在线--WolStame 介绍:最强游戏Crysis全方位剖析与深度优化指南 关键:CRYSIS/DX10游戏/技术剖析/优化 原创:小熊在线 ...

  4. 最强神作!Crysis深度剖析与优化指南

    题目:最强神作!Crysis深度剖析与优化指南 作者:小熊在线--WolStame 介绍:最强游戏Crysis全方位剖析与深度优化指南 关键:CRYSIS/DX10游戏/技术剖析/优化 原创:小熊在线 ...

  5. 最强神作!Crysis深度剖析与优化指南(1-8)

    题目:最强神作!Crysis深度剖析与优化指南 作者:小熊在线--WolStame 介绍:最强游戏Crysis全方位剖析与深度优化指南 关键:CRYSIS/DX10游戏/技术剖析/优化 原创:小熊在线 ...

  6. Mysql binlog应用场景与原理深度剖析

    1 基于binlog的主从复制 Mysql 5.0以后,支持通过binary log(二进制日志)以支持主从复制.复制允许将来自一个MySQL数据库服务器(master) 的数据复制到一个或多个其他M ...

  7. 好文推荐 | MySQL binlog应用场景与原理深度剖析

    作者:田守枝 来自:田守枝的博客(公众号) 本文深入介绍Mysql Binlog的应用场景,以及如何与MQ.elasticsearch.redis等组件的保持数据最终一致.最后通过案例深入分析binl ...

  8. Web代码安全漏洞深度剖析

    在当今互联网高速发展的环境下,信息安全成了热门话题,覆盖个人信息安全.企业信息安全,乃至国家安全.攻击者常常把目标定位在寻找和获取系统源码上,传统IT开发人员从0到1建设系统时,少不了涉及常规化的开发 ...

  9. 深度剖析:Redis分布式锁到底安全吗?看完这篇文章彻底懂了!

    ‍‍‍‍‍‍‍‍‍‍‍‍阅读本文大约需要 20 分钟. 大家好,我是 Kaito. 这篇文章我想和你聊一聊,关于 Redis 分布式锁的「安全性」问题. Redis 分布式锁的话题,很多文章已经写烂了 ...

  10. 深度剖析目标检测算法YOLOV4

    深度剖析目标检测算法YOLOV4 目录 简述 yolo 的发展历程 介绍 yolov3 算法原理 介绍 yolov4 算法原理(相比于 yolov3,有哪些改进点) YOLOV4 源代码日志解读 yo ...

最新文章

  1. Linux内核链表实现剖析
  2. 排除网络故障课后习题参考答案
  3. 解决jupyter notebook的kernel error内核启动失败问题
  4. yii2通过url访问类中的方法_每日学点---nginx变量使用方法详解(3)
  5. 运动世界校园显示服务器开小差,小学新生入学适应存在的问题及教育对策 ——以徐州市某小学为例...
  6. 国际认可不断增加,国产数据库发展与应用前景如何?
  7. C语言中的类模拟(C++编程思想)
  8. android 应用模式之mvp
  9. Linux核心应用命令速查
  10. java中example函数作用,MyBatis逆向工程中的Mapper接口以及Example的实例函数及详解...
  11. 携号转网查询接口API,手机号码归属地及运营商查询接口
  12. 《机器学习实战》--资料下载和运行环境
  13. 一键美化python代码
  14. 浅析VO、DTO、DO、BO的概念、区别和用处
  15. Vue中error ‘XXXXX‘ is not defined no-undef解决办法
  16. true在java_使用truelicense实现用于JAVA工程license机制
  17. 眼睛炯炯有神的教官领着我们这些小公主
  18. 全球与中国农用软管卷盘市场现状及未来发展趋势
  19. 辽宁师范大学计算机学院查寝吗,辽宁师范大学影视艺术学院
  20. 小型NAS搭建实例②——ubuntu server 的一些设置,包含NFS挂载,CIFS挂载,常用工具安装

热门文章

  1. Linux网络管理—brctl命令
  2. SQLyog安装过程
  3. wifiadbtool下载_私享空间-中兴B860Av1.1免拆机仅安装APP教程 - 中国电信悦me盒子
  4. 网络应用之javascript循环语句
  5. 解决ping邮箱服务器域名,提示找不到主机域名的问题
  6. 进程管理:ps top nice
  7. abp Volo.Abp.AbpException: Could not find the bundle file ‘/libs/abp/core/abp.css‘ for the bundle ‘B
  8. MyIE2 更名为 Maxthon
  9. 图像处理-直方图的反向投影
  10. Satpy基础系列教程(1)-FY4A AGRI L1数据处理