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 ...
随机推荐
- 打patch p0 p1区别
如何使用patch 对于一个patch文件,有两种常用使用方法: 1.代码:cat new-patch | patch -p0 2.代码:patch -p0 < new-patch patc ...
- COJ 0579 4020求次短路的长度
4020求次短路的长度 难度级别:C: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 在一个地图上共有N个路口(编号分别为1到N),R条道路( ...
- windows客户端连接到samba服务器(如何使用samba)
首先确保你的服务端已经配置好samba并成功启动服务,方法可参考此文章http://blog.csdn.net/linglongwunv/archive/2010/01/19/5212875.aspx ...
- AES - Rijndael 算法(一)
1997年1月,美国标准技术协会NIST开始遴选数据加密标准(Data Encryption Standard,简称DES)替代者的工作,称为高级加密标准[1’2](Advanced Enerypti ...
- C - Courses - hdu 1083(模板)
一共有N个学生跟P门课程,一个学生可以任意选一 门或多门课,问是否达成: 1.每个学生选的都是不同的课(即不能有两个学生选同一门课) 2.每门课都有一个代表(即P门课都被成功选过) 输入为: P N( ...
- Hat’s Words hdu-1247
就是查找这个单词能不能有两个单词组成,简单的字典树题目 ////////////////////////////////////////////////////////////// #include& ...
- J - Assign the task - hdu 3974(DFS建树+简单线段树)
题意:给一些节点简单额对应关系,可以组成一个树,如果树的某一个节点更新那么他的所有子节点都要更新,中间,会有一些查询 分析:题意倒也不难理解,但是但是不知道怎么建树...于是自能百度,看了kuangb ...
- Gradle构建Java Web应用(转)
转自:http://www.blogjava.net/jiangshachina/archive/2014/02/03/409285.html 本文是发布在java.net上的一篇摘自于<Gra ...
- iOS--导航栏样式
push返回按钮样式: UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBar ...
- Django URL传递参数的方法总结
1 无参数情况 配置URL及其视图如下: 1 2 3 4 (r'^hello/$', hello) def hello(request): return HttpResponse("He ...