一、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 用法简介的更多相关文章

  1. MSSQL Sql加密函数 hashbytes 用法简介

    转自:http://www.maomao365.com/?p=4732 一.mssql sql hashbytes 函数简介 hashbytes函数功能为:返回一个字符,通过 MD2.MD4.MD5. ...

  2. mssql sql server ceiling floor 函数用法简介

    摘自: http://www.maomao365.com/?p=5581摘要: 下文主要讲述ceiling.floor函数的功能及举例说明  一.ceiling floor函数功能简介 ceiling ...

  3. 【转】使用SQL Tuning Advisor STA优化SQL

    SQL优化器(SQL Tuning Advisor STA)是Oracle10g中推出的帮助DBA优化工具,它的特点是简单.智能,DBA值需要调用函数就可以给出一个性能很差的语句的优化结果.下面介绍一 ...

  4. MySQL 5.7 优化SQL提升100倍执行效率的深度思考(GO)

    系统环境:微软云Linux DS12系列.Centos6.5 .MySQL 5.7.10.生产环境,step1,step2是案例,精彩的剖析部分在step3,step4. 1.慢sql语句大概需要13 ...

  5. mysql优化sql语句

    mysql优化sql语句   常见误区   www.2cto.com   误区1:   count(1)和count(primary_key) 优于 count(*)   很多人为了统计记录条数,就使 ...

  6. 如何用 SQL Tuning Advisor (STA) 优化SQL语句

    在Oracle10g之前,优化SQL是个比较费力的技术活,不停的分析执行计划,加hint,分析统计信息等等.在10g中,Oracle推出了自己的SQL优化辅助工具: SQL优化器(SQL Tuning ...

  7. sql语句优化SQL Server

    MS   SQL   Server查询优化方法查询速度慢的原因很多,常见如下几种 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)          2.I/O吞吐量小,形成了 ...

  8. SQL中EXISTS和IN用法

    SQL中EXISTS的用法  指定一个子查询,检测行的存在. 语法:EXISTS subquery 参数:subquery 是一个受限的 SELECT 语句 (不允许有 COMPUTE 子句和 INT ...

  9. 转载 50种方法优化SQL Server数据库查询

    原文地址 http://www.cnblogs.com/zhycyq/articles/2636748.html 50种方法优化SQL Server数据库查询 查询速度慢的原因很多,常见如下几种: 1 ...

随机推荐

  1. 转:微博CacheService架构浅析

    文章来自于:http://www.infoq.com/cn/articles/weibo-cacheservice-architecture 微博作为国内最大的社交媒体网站之一,每天承载着亿万用户的服 ...

  2. UMHexagonS搜索过程

    通过相邻块的预测得到mvp后,会以mvp为基础搜索最佳的匹配块,UMHexagonS就是h.264中用的一种搜索算法. UMHexagonS是一种整像素搜索算法,也就是搜索过程中,参考图像一直都是原来 ...

  3. u8818 G300的官方rom刷机包及详细的刷机方法

    之前看到有些机友在找华为u8818的官方rom固件包,在这里我给大家分享一下这个手机的官方原版的固件rom包吧,有2.3的,也有4.0的,大家可以根据自己的需求来下载. 华为U8818官方2.3固件: ...

  4. Actionbarsherlock 简明教程

    ActionBarSherlock应该算得上是GitHub上最火的Android开源项目了,它是一个独立的库,通过一个API和主题,开发者就可以很方便地使用所有版本的Android动作栏的设计模式. ...

  5. iPhone之为UIView设置阴影(CALayer的shadowColor,shadowOffset,shadowOpacity,shadowRadius,shadowPath属性)

    效果图: 以下代码实现: 第一个图片的代码 //加阴影--任海丽编辑 _imageView.layer.shadowColor = [UIColor blackColor].CGColor;//sha ...

  6. Java中的局部代码块、构造代码块、静态代码块

    局部代码块: 作用:控制变量的生命周期: 在程序中,当我们已经使用完 x 后,并且在接下来的代码中,不会再用到x,那么就没必要让x 在内存中占用空间了,这用情况下,可以使用 局部代码块,将x及其所设计 ...

  7. 使用javascript判断浏览器类型

    之前在项目中遇到过要针对不同浏览器做不同的一些js或者css操作,后来某个朋友也突然问到这个问题,所以,整理了一下,在这里留个笔记,方便以后使用. 使用javascript判断浏览器类型: funct ...

  8. SOAP详解

    1. SOAP简介 1.1应用背景 对于应用程序开发来说,使程序之间进行因特网通信是很重要的.目前的应用程序通过使用远程过程调用(RPC)在诸如 DCOM 与 CORBA 等对象之间进行通信,但是 H ...

  9. Foreman 企业级配置管理解决方案

    Foreman 企业级配置管理解决方案 Foreman 企业级配置管理解决方案 笔记本 puppet foreman 构建运维体系 本文是构建运维体系的其中一个关键环节. 什么是 foreman Fo ...

  10. 机房收费系统——在VB中将MSHFlexGrid控件中的数据导出到Excel

    机房收费系统中,好多查询的窗体都包含同一个功能:将数据库中查询到的数据显示在MSHFlexGrid控件中,然后再把MSHFlexGrid控件中的数据导出到Excel表格中. 虽然之前做过学生信息管理系 ...