[每日一题] 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 ...
随机推荐
- Gold Balanced Lineup
#include<cstdio> #include<cstring> #include<cmath> #include <cstdlib> #defin ...
- TProcedure,TMethod,TNotifyEvent,TWndMethod的区别,并模拟点击按钮后发生的动作
忽然发现TProcedure和TNotifEvent的区别还挺大的: procedure TForm1.Button2Click(Sender: TObject); begin ShowMessage ...
- magento 修改 paypal order product name
app/code/core/Mage/Sales/Model/Quote Item.php public function setProduct($product) { if ($this-> ...
- 【转】(DT系列三)系统启动时, dts 是怎么被加载的
原文网址:http://www.cnblogs.com/biglucky/p/4057481.html 一,主要问题:系统在启动的时候,是怎么加载 dts的:Lk,kernel中都应调查. 二:参考文 ...
- doxygen学习笔记
下载doxygen:http://www.cnblogs.com/duxiuxing/p/4301015.html 学习思路 doxygen能够根据代码和注释生成文档.可想而知,doxygen对注释的 ...
- 使用Windows驱动的虚拟打印机,打印Excel表格无表格线问题解决(2)
测试: 经前天的测试,最终还是没有明显的定夺到底是驱动的问题,还是打印机的问题.但是按照可能性来排查,最明显的一点就是其他测试环境不变的情况下增加一张图片,就可以打印出表格线,我始终觉得这里是突破点, ...
- C++11 可变参数模板
在C++11之前, 有两个典型的受制于模板功能不强而导致代码重复难看的问题, 那就 function object 和 tuple. 拿 function objects 来说, 需要一个返回类型参数 ...
- 一个简单的JUnit项目
本人一直很喜欢JAVA,可是真正接触到JUnit也不过半年.由于公司进行网页测试,采用的是 JUnit+selenium的方式搭建的测试框架,然后采用JAVA语言编写,所以本人也好好研究了一下JUni ...
- Drainage Ditches - poj 1273(网络流模板)
题意:1是源点,m是汇点,求出来最大流量,没什么好说的就是练习最大流的模板题 ************************************************************* ...
- Python学习笔记2-flask-sqlalchemy 简单笔记
flask-sqlalchemy 简单笔记 字数 阅读 评论 喜欢 flask-sqlalchemy SQLAlchemy已经成为了python世界里面orm的标准,flask是一个轻巧的web框架, ...