[每日一题] OCP1z0-047 :2013-07-24 子查询――外查询与内查询的执行顺序
一、Oracle的子查询分为两类分别是嵌套子查询和非嵌套子查询。所谓嵌套子查询是指,子查询是一个独立的查询不与外部查询相关,子查询将被先执行,而且只被执行一次,子查询执行完成后,再执行外部的查询,外部查询在执行过程中会使用到子查询的结果。下面我们来看嵌套子查询。
hr@OCM> set autot traceonly;
hr@OCM> SELECT employee_id,first_name,salary
2 FROM employees
3 WHERE
4 department_id=(SELECT department_id
5 FROM departments where department_name='IT');
nested query叫:inner query,main query叫outer query。
outer query是:SELECTemployee_id,first_name,salary
FROM employees;
Nested query是:SELECTdepartment_id
FROM departments where department_name='IT';
看上图的执行计划,是先执行:id=3(DEPARTMENTS做全表扫描,通过部门名称过滤出部门编号)即先执行nested query,然后再执行id=2(对EMPLOYEES表的DEPARTMENT_ID列上的索引做范围扫描,然后能索引的键值找到EMPLOYEES表中的编号、姓名、薪水),取后执行outer query。最后SELECT出来的数据来自于outer query。
通过上面的分析:子查询可以向主查询提供常量查询条件,子查询被优先执行,产生的结果作为主查询的过滤条件,然后主果询以这个条件过滤出结果,返回给用户数据。
二、上面的语句也可以转化成表连接的方式:
hr@OCM> SELECT employee_id,first_name,salary
2 FROM employees e,departments d
3 WHERE e.department_id=d.department_id
4 AND department_name='IT';
三、也可以用子查询非嵌套化,解除构成子查询的查询语句与主查询语句的嵌套关系或者通过表的连接方式替代子查询,以获得良的执行速度。事实上,几乎大部分的子查询都要经过转化。在子查询非嵌套化不可能实现时,优化器会制定把子查询放在最优先或最后位置 执行的独立执行计划。此时,这个查询语句的执行速度会随着子查询被放在最优先或最后位置执行的顺序不同而不同。
hr@OCM> SELECT department_id, last_name, salary
2 FROM employees x
3 WHERE salary > (SELECT AVG(salary)
4 FROM employees
5 WHERE x.department_id = department_id)
6 ORDER BY department_id;
总结:如果优化器无法将其连接转为表连接查询,而只能为其中的主查询和子查询制定相应的执行计划 。如果处理类型为需要将子查询的结果提供给主查询的列,且在子查询中能够使用索引,那么优化器就将制定优先执行子查询的执行计划。如果处理类型为在主查询被执行的同时验证子查询的FILTER,或在读取了各个集合数据之后再对其进行合并,那么就会按照hash连接的方式来执行。
A答案是说:先执行outer query,再执行nested query
B答案是说:先执行nested query,再执行outer query
C答案是说:只有返回了nested query的结果,才能执行outer query
D答案是说:nested query返回的结果能估算出outer query中返回的每一行。
库题的答案是:AD,个人觉得BD答案更合适
为什么B错呢?这个答案有点疑异,我们大家一起来讨论!!!!
[每日一题] OCP1z0-047 :2013-07-24 子查询――外查询与内查询的执行顺序的更多相关文章
- 老男孩IT教育-每日一题汇总
老男孩IT教育-每日一题汇总 第几天 第几周 日期 快速访问链接 第123天 第二十五周 2017年8月25日 出现Swap file….already exists以下错误如何解决? 第122天 2 ...
- CISP/CISA 每日一题 14
CISA 每日一题(答) 自动无人值守运行(LIGHTS-OUT)优势:1.信息系统运行成本的遏制/减少:2.持续运行(24/7):3.减少系统错误和中断次数. I/O 控制人员负责保证:1.批处理信 ...
- 【JavaScript】【dp】Leetcode每日一题-解码方法
[JavaScript]Leetcode每日一题-解码方法 [题目描述] 一条包含字母 A-Z 的消息通过以下映射进行了 编码 : 'A' -> 1 'B' -> 2 ... 'Z' -& ...
- 【python】Leetcode每日一题-最大数
[python]Leetcode每日一题-最大数 [题目描述] 给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数. 注意:输出结果可能非常大,所以你需要返回一个 ...
- 每日一题20180330-Linux
一.问题 1.1 统计/var/log/下所有文件个数 1.2 查找出/var/log目录下面修改时间是7天以前,大小在50k到2M之间,并以.log结尾的文件把这些文件复制到/data目录中 1.3 ...
- 【Java每日一题】20170106
20170105问题解析请点击今日问题下方的"[Java每日一题]20170106"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...
- 【Java每日一题】20170105
20170104问题解析请点击今日问题下方的"[Java每日一题]20170105"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...
- 【Java每日一题】20170104
20170103问题解析请点击今日问题下方的"[Java每日一题]20170104"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...
- 【Java每日一题】20170103
20161230问题解析请点击今日问题下方的"[Java每日一题]20170103"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...
- 【Java每日一题】20161230
// 20161229问题解析请点击今日问题下方的"[Java每日一题]20161230"查看(问题解析在公众号首发,公众号ID:weknow619)package Dec2016 ...
随机推荐
- ISO7816协议的块传输协议
1.块传输协议中的前三个字节是强制必须有的 NAD节点地址: 当终端支持多个卡槽,终端和这些卡槽以总线的方式通讯时,该字节有用,其他情况下,默认为0 bit1-3:定义了源地址 bit5-7:定义了目 ...
- (转载)PHP删除数组中的特定元素的代码
(转载)http://www.jb51.net/article/30689.htm 我们知道,PHP没有提供专门删除一个特定数组元素的方法.但是可以通过unset()函数来完成这种要求比如下面的程序: ...
- vim 插件
自动补全插件更换:youcompleteme github:https://github.com/Valloric/YouCompleteMe
- ubuntu进入命令登录界面
按ctrl+alt+F1或者ctrl+alt+F2进入系统终端,可以以命令行界面登录系统.
- div+css 圆角加阴影
.test{ display: inline-block; padding: 5px 10px 6px; text-decoration: none; border-radius: 5px; -moz ...
- escape encodeURI encodeURIComponent区别
escape() 函数可对字符串进行编码,这样就可以在所有的计算机上读取该字符串.使用unescape来解码. 有效的URI(统一资源标示符)是不能包含某些字符的,如空格,所以需要进行编码,编码方法有 ...
- javascript 数组 排除null, undefined, 和不存在的元素
The most common way to loop through the elements of an array is with a for loop: var o = [1,2,3,4,5] ...
- Computer Vision and Machine Learning Competitions
一.ImageNet Object Detection, Object Classification+Localization 二.COCO Image Captioning 三.LFW Face R ...
- C++中struct和class的区别 [转]
一. C++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数据类型的数据结构了,它已经获取了太多的功能. struct能包含成员函数吗? 能! struct能继承吗? ...
- 4G时代来临,运营商为谁搭台献唱?
4G时代已然来临.对用户而言,4G意味着更快的传输速度,以及更优质的移动网络体验. 只是对运营商而言.怎样部署4G却成了一大难题.众所周知,在全球范围内,4G LTE成为眼下最率先的移动宽带解 ...