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 ...
随机推荐
- IC芯片設計
IC從生產目的上可以分成為通用IC(如CPU,DRAM,接口芯片等)和ASIC(ApplicationSpecificIntegreted Circuit)兩種,ASIC是因應專門用途而生產的IC. ...
- -_-#【Angular】自定义指令directive
AngularJS学习笔记 <!DOCTYPE html> <html ng-app="Demo"> <head> <meta chars ...
- HDOJ(HDU) 2097 Sky数(进制)
Problem Description Sky从小喜欢奇特的东西,而且天生对数字特别敏感,一次偶然的机会,他发现了一个有趣的四位数2992,这个数,它的十进制数表示,其四位数字之和为2+9+9+2=2 ...
- Visual Studio Code 与 Github 集成
使用Visual Studio Code进行Nodejs开发充满了便利,为了更好的进行开发工作,有必要使用Github进行代码管理. Visual Studio Code已经集成了GIT组件: htt ...
- 查看Linux发行版的名称和版本号
Method #1: /etc/*-release file 在Terminal中执行命令: cat /etc/*-release 我的输出结果: DISTRIB_ID=Ubuntu DISTRIB_ ...
- shell中$0,$?,$!等的特殊用法【转载】
本文转载自:http://blog.sina.com.cn/s/blog_464f6dba0100psy9.html ----------------------------------------- ...
- java中字符串的比较
compareTo方法是比较两个字符串的词典顺序 也就是在字典中的顺序,比如“abcd”在“acdb”前面 大于返回1,小于返回-1 equals:比较两字符串的内容是否相同. 相同返回1,不同返回 ...
- python:unittest(测试框架)
一,基本概念 TestCase:所有测试用例的基类 TestLoad:加载测试用例,返回TestSuite(测试套件) TestSuite:创建测试套件 TextTestRunner:运行测试用例 T ...
- oracle for update和for update nowait
原文地址:http://www.cnblogs.com/quanweiru/archive/2012/11/09/2762223.html 1.for update 和 for update nowa ...
- cocos2d-x 在mac下执行 demo
搞了好久,最终成功了. 记录一下 前辈的文章. 依照这个弄的 .http://blog.csdn.net/taowenyin/article/details/11750127 前辈的这个文章是在win ...