with优化妙用
--语法:
/*
with
alias_name1 as (subquery1),
alias_name2 as (subQuery2),
……
alias_nameN as (subQueryN)
select col1,col2…… col3
from alias_name1,alias_name2……,alias_nameN
如:
WITH
Q1 AS (SELECT 3 + 5 S FROM DUAL),
Q2 AS (SELECT 3 * 5 M FROM DUAL),
Q3 AS (SELECT S, M, S + M, S * M FROM Q1, Q2)
SELECT * FROM Q3;
好处:
1. 结构清晰,预先定义(在本文《with自居的清晰.sql》中清晰可见。
2. 性能更好,一份复制(类似SYS_TMP...),多份使用,可参见《with子句的高效.sql》。
3. 代码修改不必修改多处,可参见《with子句的高效.sql》中提到的搞笑案例。
*/
/*
查询出部门的总薪水大于所有部门平均总薪水的部门。部门表s_dept,员工表s_emp。
分析:做这个查询,首先必须计算出所有部门的总薪水,然后计算出总薪水的平均薪水,再筛选出部门的总薪水大于所有部门总薪水平均薪水的部门。
1. 用with 查询查出所有部门的总薪水,
2. 用with 从第1 步获得的结果表中查询出平均薪水;
3. 最后利用这两次 的with 查询比较总薪水大于平均薪水的结果,如下:
*/
--构造环境
drop table dept purge;
drop table emp purge;
create table dept as select * from scott.dept;
create table emp as select * from scott.emp;
set term off
set heading on
set verify off
set feedback off
set linesize 2000
set pagesize 30000
set long 999999999
set longchunksize 999999
set autotrace off
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
WITH DEPT_COSTS AS --查询出部门的总工资
(SELECT D.DNAME, SUM(E.SAL) DEPT_TOTAL
FROM DEPT D, EMP E
WHERE E.DEPTNO = D.DEPTNO
GROUP BY D.DNAME),
AVE_COST AS --查询出部门的平均工资,在后一个WITH语句中可以引用前一个定义的WITH语句
(SELECT SUM(DEPT_TOTAL) / COUNT(*) AVG_SUM FROM DEPT_COSTS)
SELECT *
FROM DEPT_COSTS DC
WHERE DC.DEPT_TOTAL > (SELECT AC.AVG_SUM FROM AVE_COST AC);
DNAME DEPT_TOTAL
-------------- ----------
RESEARCH 10875
/*
可以使用前面的数据,在后面的with语句中直接引用。需求,展示根据查询结果查询出的数据,并把根据查询出的结果进行统计。
如最大工资,最小工资,平均工资, 进行级联。
注意:
由于查询的统计数据的条数为1条,所以不会发生笛卡儿积的错误,
*/
WITH TEMP_DATA AS --查询基础数据(进行级联,由于查询的统计数据的条数为1条,所以不会发生笛卡儿积的错误)
(SELECT EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO FROM EMP),
TEM_SUM AS --查询统计数据
(SELECT MAX(SAL), MIN(SAL), SUM(SAL) FROM TEMP_DATA)
SELECT * FROM TEM_SUM, TEMP_DATA;
MAX(SAL) MIN(SAL) SUM(SAL) EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
--------- ---------- ---------- ---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
5000 800 29025 7369 SMITH CLERK 7902 17-12月-80 800 20
5000 800 29025 7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
5000 800 29025 7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
5000 800 29025 7566 JONES MANAGER 7839 02-4月 -81 2975 20
5000 800 29025 7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30
5000 800 29025 7698 BLAKE MANAGER 7839 01-5月 -81 2850 30
5000 800 29025 7782 CLARK MANAGER 7839 09-6月 -81 2450 10
5000 800 29025 7788 SCOTT ANALYST 7566 19-4月 -87 3000 20
5000 800 29025 7839 KING PRESIDENT 17-11月-81 5000 10
5000 800 29025 7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30
5000 800 29025 7876 ADAMS CLERK 7788 23-5月 -87 1100 20
5000 800 29025 7900 JAMES CLERK 7698 03-12月-81 950 30
5000 800 29025 7902 FORD ANALYST 7566 03-12月-81 3000 20
5000 800 29025 7934 MILLER CLERK 7782 23-1月 -82 1300 10
--在列的子查询中引用WITH函数:
SELECT (WITH A AS (SELECT '1' FROM DUAL) SELECT * FROM A) as COL1 FROM DUAL;
C
-
1
with优化妙用的更多相关文章
- JavaScript的妙与乐(一)之 函数优化
JavaScript的妙与乐系列文章主要是展示一些JavaScript上面比较好玩一点的特性和一些有用的技巧,里面很多内容都是我曾经在项目中使用过的一些内容(当然,未必所有技巧的使用频率都很高^_^) ...
- 树链剖分的一种妙用与一类树链修改单点查询问题的时间复杂度优化——2018ACM陕西邀请赛J题
题目描述 有一棵树,每个结点有一个灯(初始均是关着的).每个灯能对该位置和相邻结点贡献1的亮度.现有两种操作: (1)将一条链上的灯状态翻转,开变关.关变开: (2)查询一个结点的亮度. 数据规模:\ ...
- HDFS 细粒度锁优化,FusionInsight MRS有妙招
摘要:华为云FusionInsight MRS通过FGL对HDFS NameNode锁机制进行优化,有效提升了NameNode的读写吞吐量,从而能够支持更多数据,更多业务请求访问,从而更好的支撑政企客 ...
- 优化MySQL插入方法的五个妙招
以下是涉及到插入表格的查询的5种改进方法: 1)使用LOAD DATA INFILE从文本下载数据这将比使用插入语句快20倍. 2)使用带有多个VALUES列表的INSERT语句一次插入几行这将比使用 ...
- 【C#代码实战】群蚁算法理论与实践全攻略——旅行商等路径优化问题的新方法
若干年前读研的时候,学院有一个教授,专门做群蚁算法的,很厉害,偶尔了解了一点点.感觉也是生物智能的一个体现,和遗传算法.神经网络有异曲同工之妙.只不过当时没有实际需求学习,所以没去研究.最近有一个这样 ...
- Expert 诊断优化系列-------------针对重点语句调索引
上一篇我们说了索引的重要性,一个索引不仅能让一条语句起飞,也能大量减少系统对CPU.内存.磁盘的依赖.我想上一篇中的例子可以说明了.给出上一篇和目录文链接: SQL SERVER全面优化------- ...
- 妙味课堂——HTML+CSS基础笔记
妙味课堂的课程讲得非常的清楚,受益匪浅.先把HTML和CSS基础课程部分视频的学习笔记记录如下: padding #PS基础 ##前端需要的PS技能 - PS技能(前端需要):切图.修图.测量 - P ...
- Android UI性能优化实战, 识别View中的性能问题
出自:[张鸿洋的博客]来源:http://blog.csdn.net/lmj623565791/article/details/45556391 1.概述 2015年初google发布了Android ...
- 对JavaScript优化及规范的一些感想
变量...... 1.一个变量只存一种类型的数据,2.尽量减少对隐式转换的依赖,这样可增强程序的可读性,日后修改程序时不至于混乱,3.使用匈牙利命名法,4.使用局部变量时记得加 var 进行声明,不然 ...
随机推荐
- 如何正确且高效地中文汉化Spyder 2 或 Spyder3(图文详解)(博主推荐)
不多说,直接上干货! 汉化下载和教程页面 : https://github.com/kingmo888/Spyder_Simplified_Chinese 汉化文件最新版直接下载 : https: ...
- 008-PageBean类模板
1 PageBean模板一 package ${enclosing_package}; import java.util.ArrayList; import java.util.List; publi ...
- unity状态机实现
刚看了浅墨大神的文章让我对状态机有了进一步的理解 具体实现见装载的状态机文章 首先得有个总状态HeroineBaseState接口,其里面的方法主要是与行为相关的方法,让继承此接口的类来实现的 具体的 ...
- spring的基本用法
1,关于spring容器: spring容器是Spring的核心,该 容器负责管理spring中的java组件, ApplicationContext ctx = new ClassPathXmlAp ...
- zato——Channels Outgoing connections
Channels,服务获得请求.方式 AMQP JMS WebSphere MQ plain HTTP SOAP ZeroMQ 其中,只有HTTP是同步的 Plain HTTP和SOAP暴漏服务直接通 ...
- Principal Component Analysis(PCA)
Principal Component Analysis(PCA) 概念 去中心化(零均值化): 将输入的特征减去特征的均值, 相当于特征进行了平移, \[x_j - \bar x_j\] 归一化(标 ...
- 公司管理系列--80% of Your Culture is Your Founder(FaceBook)
80% of Your Culture is Your Founder When Molly Graham joined Facebook in 2008, the company still ...
- (微信小程序)二 : 创建一个页面
首先先看一下pages的目录结构吧. 我创建了一个topics页面.3个文件全创建好了之后 我往topics.js添加数据 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...
- Silverlight & Blend动画设计系列七:模糊效果(BlurEffect)与阴影效果(DropShadowEffect)
模糊效果(BlurEffect)与阴影效果(DropShadowEffect)是两个非常实用和常用的两个特效,比如在开发相册中,可以对照片的缩略图添加模糊效果,在放大照片的过程中动态改变照片的大小和模 ...
- golang学习之go简单博客应用
先说说golang的语法吧,个人觉得有以下特点: 简洁,不管是变量.方法声明,还是代码编写,均十分简洁,效率也比较高 非纯粹面向对象,但是go的struct类似c的struct,go的结构体还可以进行 ...