一、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 子查询――外查询与内查询的执行顺序的更多相关文章

  1. 老男孩IT教育-每日一题汇总

    老男孩IT教育-每日一题汇总 第几天 第几周 日期 快速访问链接 第123天 第二十五周 2017年8月25日 出现Swap file….already exists以下错误如何解决? 第122天 2 ...

  2. CISP/CISA 每日一题 14

    CISA 每日一题(答) 自动无人值守运行(LIGHTS-OUT)优势:1.信息系统运行成本的遏制/减少:2.持续运行(24/7):3.减少系统错误和中断次数. I/O 控制人员负责保证:1.批处理信 ...

  3. 【JavaScript】【dp】Leetcode每日一题-解码方法

    [JavaScript]Leetcode每日一题-解码方法 [题目描述] 一条包含字母 A-Z 的消息通过以下映射进行了 编码 : 'A' -> 1 'B' -> 2 ... 'Z' -& ...

  4. 【python】Leetcode每日一题-最大数

    [python]Leetcode每日一题-最大数 [题目描述] 给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数. 注意:输出结果可能非常大,所以你需要返回一个 ...

  5. 每日一题20180330-Linux

    一.问题 1.1 统计/var/log/下所有文件个数 1.2 查找出/var/log目录下面修改时间是7天以前,大小在50k到2M之间,并以.log结尾的文件把这些文件复制到/data目录中 1.3 ...

  6. 【Java每日一题】20170106

    20170105问题解析请点击今日问题下方的"[Java每日一题]20170106"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...

  7. 【Java每日一题】20170105

    20170104问题解析请点击今日问题下方的"[Java每日一题]20170105"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...

  8. 【Java每日一题】20170104

    20170103问题解析请点击今日问题下方的"[Java每日一题]20170104"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...

  9. 【Java每日一题】20170103

    20161230问题解析请点击今日问题下方的"[Java每日一题]20170103"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...

  10. 【Java每日一题】20161230

    // 20161229问题解析请点击今日问题下方的"[Java每日一题]20161230"查看(问题解析在公众号首发,公众号ID:weknow619)package Dec2016 ...

随机推荐

  1. IIS 内部运行机制及Asp.Net执行过程详解

    一直以来对一个Asp.net页面穿过IIS后就返回给浏览器一个HTML页面感觉很是神奇.虽然做技术这么长时间了,也曾经大致了解过一点来龙去脉,但是如果你真的问起我比较详细的过程,我还真的回答不上来,好 ...

  2. Failed to load resource: the server responded with a status of 413 (Request Entity Too Large)

    Node应用,使用formidable处理文件上传,本地测试没有问题,部署到服务器上之后上传大文件浏览器收到以下错误信息: Failed to load resource: the server re ...

  3. 第23章 COM和ActiveX(COM可以实现跨进程跨机器的函数调用)

    控件对象既可在EXE中实现,也可在DLL中实现.这种实现对于COM对象的用户来说是透明的.因为COM提供了调度服务(marshaling).COM调度机制能够化进程甚至跨机器的函数调用,这使得16位程 ...

  4. 类似NL的update更新

    update b set b.object_name=(select a.object_name from a where a.object_id=b.object_id); create table ...

  5. SDUT2087 离散事件模拟-银行管理(模拟)

    题目链接. 分析: 模拟. 果然模拟什么的最讨厌了. 用e1,e2分别记录队列1,队列2的结束时间. 每个结点的s记录开始时间,e一开是记录逗留时间,进队列的时候,改成离开的时间.时刻记录总时间就可以 ...

  6. 【最长下降子序列】【动态规划】【二分】XMU 1041 Sequence

    题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1041 题目大意: 一个二维平面,上面n(n<=1 000 000)个点.问至少选 ...

  7. app开发历程————Android程序解析服务器端的JSON格式数据,显示在界面上

    上一篇文章写的是服务器端利用Servlet 返回JSON字符串,本文主要是利用android客户端访问服务器端链接,解析JSON格式数据,放到相应的位置上. 首先,android程序的布局文件main ...

  8. HDOJ(HDU) 2088 Box of Bricks(平均值)

    Problem Description Little Bob likes playing with his box of bricks. He puts the bricks one upon ano ...

  9. Java---文件的切割与合并,已经实现图形界面(工具)

    实现对任意文件的切割,实现对切割后的文件的合并. 上次只写了特定目录下的文件切割与合并,有点遗憾, 这次,我写了一个图形界面来实现对文件的切割与合并. 文件切割: 用户可以自己选择需要切割的文件, 软 ...

  10. 【3】JAVA---地址App小软件(AddPanel.class)(表现层)

    添加地址信息界面. 年龄和地址必须是数字,否则会弹出窗口提示. 地址信息不能为空. /* * AddPanel.java * * Created on __DATE__, __TIME__ */ pa ...