当前位置: 首页 > news >正文

WITH AS的用法

一、WITH AS的含义 
       WITH AS短语,也叫做子查询部分(subquery factoring),可以让你做很多事情,定义一个SQL片断,该SQL片断会被整个SQL语句所用到。有的时候,是为了让SQL语句的可读性更高些,也有可能是在UNION ALL的不同部分,作为提供数据的部分。 
       特别对于UNION ALL比较有用。因为UNION ALL的每个部分可能相同,但是如果每个部分都去执行一遍的话,则成本太高,所以可以使用WITH AS短语,则只要执行一遍即可。如果WITH AS短语所定义的表名被调用两次以上,则优化器会自动将WITH AS短语所获取的数据放入一个TEMP表里,如果只是被调用一次,则不会。而提示materialize则是强制将WITH AS短语里的数据放入一个全局临时表里。很多查询通过这种方法都可以提高速度。

二、举个简单的例子

with a as (select * from test)

select * from a;

其实就是把一大堆重复用到的SQL语句放在with as 里面,取一个别名,后面的查询就可以用它

这样对于大批量的SQL语句起到一个优化的作用,而且清楚明了。

三、测试一下:

SQL> with  
  2  sql1 as (select * from t2),  
  3  sql2 as (select * from t3)  
  4  select * from t2  
  5  union  
  6  select * from t3;  
sql2 as (select * from t3)  
                       *  
ERROR at line 3:  
ORA-32035: unreferenced query name defined in WITH clause  
  
--从这里可以看到,你定义了sql1和sql2,就得用它们哦,不然会报错的。  
  
SQL> with  
  2  sql1 as (select * from t2),  
  3  sql2 as (select * from t3)  
  4  select * from sql1  
  5  union  
  6  select * from sql2;  
  
        ID  
----------  
         1  
         2  
         3  
  
--下面加个WHERE条件试试  
  
SQL> with  
  2  sql1 as (select * from t2),  
  3  sql2 as (select * from t3)  
  4  select * from sql1  
  5  union  
  6  select * from sql2  
  7  where id in(2,3);  
  
        ID  
----------  
         1  
         2  
         3  
  
--奇怪?为什么加了WHERE条件还是输出ID=1的记录了,继续往下看:  
  
SQL> with  
  2  sql1 as (select * from t2),  
  3  sql2 as (select * from t3)  
  4  select * from sql1  
  5  where id=3  
  6  union  
  7  select * from sql2  
  8  where id=3;  
  
        ID  
----------  
         3  
  
--可以看到,每个条件是要针对每个SELECT语句的。  

上面基本就是with as 的基本用法。

转自:https://blog.csdn.net/wanghai__/article/details/4776631  

https://www.cnblogs.com/superyinhai/archive/2010/04/09/1708643.html

相关文章:

  • pivot的用法
  • POJ1840 Eqs(hash)
  • Dangling meta character '+' near index 0,解决办法
  • swift - 将表格滚动条移动到底部
  • 把springboot项目设置成Windows系统开机启动
  • java中获取当前年月
  • java中元注解 @Retention @Target @Document @Inherited
  • 解决Windows10下80端口被PID为4的System占用的问题
  • 解决Android使用Eclipse查看源代码的Source not found,附带Android源码文件
  • 如何查看windows安装mysql目录
  • IntelliJ IDEA 2017 快捷键大全
  • android开发之自定义组件
  • mysql在windows环境下备份和导入数据库
  • Java NIO 学习:缓冲区(Buffer)
  • SpringBoot整合Shiro
  • Android框架之Volley
  • Bootstrap JS插件Alert源码分析
  • C++11: atomic 头文件
  • download使用浅析
  • Invalidate和postInvalidate的区别
  • java第三方包学习之lombok
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • Vue 2.3、2.4 知识点小结
  • vue中实现单选
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 机器学习 vs. 深度学习
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 面试总结JavaScript篇
  • 如何胜任知名企业的商业数据分析师?
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • 智能合约开发环境搭建及Hello World合约
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (差分)胡桃爱原石
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (三十五)大数据实战——Superset可视化平台搭建
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • (转)创业的注意事项
  • ./configure、make、make install 命令
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .NET CLR基本术语
  • .net core使用ef 6
  • .NET I/O 学习笔记:对文件和目录进行解压缩操作
  • .netcore如何运行环境安装到Linux服务器
  • .net实现头像缩放截取功能 -----转载自accp教程网
  • /proc/stat文件详解(翻译)
  • @ComponentScan比较
  • @html.ActionLink的几种参数格式
  • @synthesize和@dynamic分别有什么作用?
  • @Valid和@NotNull字段校验使用
  • @在php中起什么作用?