DBA优化SQL采用的WITH AS 用法简介
一、WITH AS简介
WITH AS的用法从oracle 9i新增的,官方文档也称之为:subquery factoring;在进行复杂的查询、统计等操作时使用with as 子句可以大大提高性能!
二、WITH AS用法
本人在oracle 11g 参考手册第1453页查询到官方对with as 的描述:
其中红色线框内给出了with as 的用法:oracle将其当作一个内联视图或者临时表来对待;
那么在进行复杂的查询时可以通过with as 对表数据进行处理,得到处理过后的结果作为一个临时表来操作,大大降低sql的复杂性;
官方文档给出with as 的用法如下:

由上图可知:其定义格式为:
WITH 名称1 [(别名1,别名2...)] AS ( 子查询 ) + 查询语句
以oracle数据库内置的用户scott中的dept,emp表来举例:
查询部门工资大于部门平均工资的部门信息
解决思路:
部门工资:按照部门进行分组,对每个部门下的员工工资进行求和,得到每个部门的工资;
部门平均工资:对上一步获得的部门工资进行就和后除以部门总数获得部门平均工资;
对以上的结果进行比较获得要求的部门信息
如果按照正常的思路去写,将会形成一个多重嵌套查询的sql,会是一个较为复杂的语句,如果利用with as 将部门工资和部门平均工资都
分别结算出来以后当作临时表,然后取得两个临时表中的工资数目进行比较很轻松获得要求的部门信息,其sql如下:
--统计部门工资大于平均工资的部门
WITH
dept_cost AS (SELECT d.dname ,sum(nvl(p.sal,0)) AS dept_total FROM dept d,emp p WHERE p.deptno (+)= d.deptno GROUP BY d.dname),
dept_avg AS (SELECT SUM(dept_total)/COUNT(1) AS sal_avg FROM dept_cost )
SELECT * FROM dept_cost a , dept_avg b WHERE a.dept_total > sal_avg ;
以上的dept_cost 就为部门工资,dept_avg为部门平均工资,通过with as 子句分别查询出来,然后通过一个select语句来操作两者获得结果如下:
DNAME DEPT_TOTAL SAL_AVG
1 ACCOUNTING 8750 7256.25
2 RESEARCH 10875 7256.25
3 SALES 9400 7256.25
DBA优化SQL采用的WITH AS 用法简介的更多相关文章
- MSSQL Sql加密函数 hashbytes 用法简介
转自:http://www.maomao365.com/?p=4732 一.mssql sql hashbytes 函数简介 hashbytes函数功能为:返回一个字符,通过 MD2.MD4.MD5. ...
- mssql sql server ceiling floor 函数用法简介
摘自: http://www.maomao365.com/?p=5581摘要: 下文主要讲述ceiling.floor函数的功能及举例说明 一.ceiling floor函数功能简介 ceiling ...
- 【转】使用SQL Tuning Advisor STA优化SQL
SQL优化器(SQL Tuning Advisor STA)是Oracle10g中推出的帮助DBA优化工具,它的特点是简单.智能,DBA值需要调用函数就可以给出一个性能很差的语句的优化结果.下面介绍一 ...
- MySQL 5.7 优化SQL提升100倍执行效率的深度思考(GO)
系统环境:微软云Linux DS12系列.Centos6.5 .MySQL 5.7.10.生产环境,step1,step2是案例,精彩的剖析部分在step3,step4. 1.慢sql语句大概需要13 ...
- mysql优化sql语句
mysql优化sql语句 常见误区 www.2cto.com 误区1: count(1)和count(primary_key) 优于 count(*) 很多人为了统计记录条数,就使 ...
- 如何用 SQL Tuning Advisor (STA) 优化SQL语句
在Oracle10g之前,优化SQL是个比较费力的技术活,不停的分析执行计划,加hint,分析统计信息等等.在10g中,Oracle推出了自己的SQL优化辅助工具: SQL优化器(SQL Tuning ...
- sql语句优化SQL Server
MS SQL Server查询优化方法查询速度慢的原因很多,常见如下几种 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了 ...
- SQL中EXISTS和IN用法
SQL中EXISTS的用法 指定一个子查询,检测行的存在. 语法:EXISTS subquery 参数:subquery 是一个受限的 SELECT 语句 (不允许有 COMPUTE 子句和 INT ...
- 转载 50种方法优化SQL Server数据库查询
原文地址 http://www.cnblogs.com/zhycyq/articles/2636748.html 50种方法优化SQL Server数据库查询 查询速度慢的原因很多,常见如下几种: 1 ...
随机推荐
- 利用Tree命令生成磁盘文件列表
命令原型:D:/>tree /? 以图形显示驱动器或路径的文件夹结构.TREE [drive:][path] [/F] [/A]/F 显示每个文件夹中文件的名称./A 使用 ASCII 字符,而 ...
- 【HDOJ】2492 Ping pong
线段树+离散化. #include <cstdio> #include <cstring> #include <cstdlib> #define MAXN 2000 ...
- WordPress ‘crypt_private()’方法远程拒绝服务漏洞
漏洞名称: WordPress ‘crypt_private()’方法远程拒绝服务漏洞 CNNVD编号: CNNVD-201306-250 发布时间: 2013-06-20 更新时间: 2013-06 ...
- jstat(JVM Statistics Monitoring Tool)
功能 用于监视虚拟机各种运行状态信息的命令行工具.它可以显示本地或远程虚拟机进程中的类装载.内存.垃圾收集.JIT编译等运行数据,在没有GUI图形界面,只提供了纯文本控制台环境的服务器上,它将是运 ...
- 【数学】XMU 1597 GCD
题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1597 题目大意: 求(am-bm, an-bn),结果取模1000000007,a,b ...
- delphi操作文本文件的方法简介
delphi操作文本文件的方法简介减小字体 增大字体 作者佚名来源不详发布时间2008-5-31 10:31:16发布人xuedelphi1 文件类型和标准过程 Delphi同Object ...
- 【2】JAVA---地址App小软件(ListPanel.class)(表现层)
这个是表现层的主界面. /* * ListPanel.java * */ package cn.hncu.addr.ui; import javax.swing.JFrame; import java ...
- linux chgrp命令【转载】
在lunix系统里,文件或目录的权限的掌控以拥有者及所诉群组来管理.可以使用chgrp指令取变更文件与目录所属群组,这种方式采用群组名称或群组识别码都可以.Chgrp命令就是change group的 ...
- hihocoder1236(北京网络赛J):scores 分块+bitset
北京网络赛的题- -.当时没思路,听大神们说是分块+bitset,想了一下发现确实可做,就试了一下,T了好多次终于过了 题意: 初始有n个人,每个人有五种能力值,现在有q个查询,每次查询给五个数代表查 ...
- Linux下Django的安装
1.下载Django.地址:https://www.djangoproject.com/download/ 2.解压3中得到的Django-1.6.2.tar.gz.使用下面的命令进行解压,解压后在当 ...