drop table emp1;

drop table dept1;

create table emp1 as select * from emp;

create table dept1 as select * from dept;

SQL> select e.empno, e.deptno

  from emp1 e

 where e.deptno in (select d.deptno from dept1 d where d.loc = 'CHICAGO');  2    3

EMPNO     DEPTNO

---------- ----------

      7900    30

      7844    30

      7698    30

      7654    30

      7521    30

      7499    30

6 rows selected.

SQL> select e.empno, e.deptno

from emp1 e, dept1 d

where e.deptno = d.deptno

and d.loc = 'CHICAGO';  2    3    4

EMPNO     DEPTNO

---------- ----------

      7499    30

      7521    30

      7654    30

      7698    30

      7844    30

      7900    30

6 rows selected.

此时子查询被改写成关联,结果完全等价,是因为d.deptno上是Unique索引

那如果d.deptno不唯一呢?

SQL> select * from dept1;

DEPTNO DNAME   LOC

---------- -------------- -------------

 10 ACCOUNTING   NEW YORK

 20 RESEARCH   DALLAS

 30 SALES   CHICAGO

 40 OPERATIONS   BOSTON

 30 SALES   CHICAGO

SQL> select e.empno, e.deptno

  from emp1 e

 where e.deptno in (select d.deptno from dept1 d where d.loc = 'CHICAGO');  2    3

EMPNO     DEPTNO

---------- ----------

      7900    30

      7844    30

      7698    30

      7654    30

      7521    30

      7499    30

6 rows selected.

SQL> select e.empno, e.deptno

from emp1 e, dept1 d

where e.deptno = d.deptno

and d.loc = 'CHICAGO';  2    3    4

EMPNO     DEPTNO

---------- ----------

      7499    30

      7499    30

      7521    30

      7521    30

      7654    30

      7654    30

      7698    30

      7698    30

      7844    30

      7844    30

      7900    30

EMPNO     DEPTNO

---------- ----------

      7900    30

12 rows selected.

改写成关联后结果就翻倍了得去从

SQL> select e.empno, e.deptno

from emp1 e, dept1 d

where e.deptno = d.deptno

and d.loc = 'CHICAGO'

group by e.empno, e.deptno  2    3    4    5  ;

EMPNO     DEPTNO

---------- ----------

      7844    30

      7521    30

      7698    30

      7900    30

      7654    30

      7499    30

6 rows selected.

semijoin链接进行subquery unnesting.的更多相关文章

  1. mysql中的semi-join

    1. 背景介绍 什么是semi-join? 所谓的semi-join是指semi-join子查询. 当一张表在另一张表找到匹配的记录之后,半连接(semi-jion)返回第一张表中的记录.与条件连接相 ...

  2. SubQuery优化

    https://zhuanlan.zhihu.com/p/60380557 子查询,分两种情况, 对于在From中的,称为‘derived table’,这种场景比较简单 对于在select,wher ...

  3. Oracle的优化器介绍

    Oracle优化器介绍 本文讲述了Oracle优化器的概念.工作原理和使用方法,兼顾了Oracle8i.9i以及最新的10g三个版本.理解本文将有助于您更好的更有效的进行SQL优化工作. RBO优化器 ...

  4. Oracle优化器介绍

    Oracle优化器介绍 本文讲述了Oracle优化器的概念.工作原理和使用方法,兼顾了Oracle8i.9i以及最新的10g三个版本.理解本文将有助于您更好的更有效的进行SQL优化工作. RBO优化器 ...

  5. PLSQL_性能优化系列04_Oracle Optimizer优化器

    2014-09-25 Created By BaoXinjian

  6. 从一条巨慢SQL看基于Oracle的SQL优化(重磅彩蛋+PPT)

    本文根据DBAplus社群第110期线上分享整理而成,文末还有好书送哦~ 讲师介绍 丁俊 新炬网络首席性能优化专家 SQL审核产品经理 DBAplus社群联合发起人.<剑破冰山-Oracle开发 ...

  7. 针对数据泵导出 (expdp) 和导入 (impdp)工具性能降低问题的检查表 (文档 ID 1549185.1)

    针对数据泵导出 (expdp) 和导入 (impdp)工具性能降低问题的检查表 (文档 ID 1549185.1) 文档内容 适用于: Oracle Database – Enterprise Edi ...

  8. oracle已知会导致错误结果的bug列表(Bug Issues Known to cause Wrong Results)

    LAST UPDATE:     1 Dec 15, 2016 APPLIES TO:     1 2 3 4 Oracle Database - Enterprise Edition - Versi ...

  9. 查询优化 In Oracle

    Cost-based query transformation in Oracle Enhanced Subquery Optimizations in Oracle Cost-based query ...

随机推荐

  1. JKXY的视频内容下载工具类

    package cn.jsonlu.make.license; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONOb ...

  2. SqlSugar-事务操作

    一.事务操作实例 特别说明: 1.特别说明:在事务中,默认情况下是使用锁的,也就是说在当前事务没有结束前,其他的任何查询都需要等待 2.ReadCommitted:在正在读取数据时保持共享锁,以避免脏 ...

  3. getSharedPreferences()与getSharedPreferences()与getDefaultSharedPreferences()的区别

    http://blog.csdn.net/ah200614435/article/details/7869681 一直迷惑于这三个方法的关系,最近忙完项目,好好的分析一下. 如果你熟悉Context那 ...

  4. Git查看、删除、重命名远程分支和tag

    这篇文章记录我在使用git的过程中碰到远程分支和tag的相关内容,提纲: 查看远程分支 删除远程分支和tag 删除不存在对应远程分支的本地分支 重命名远程分支 把本地tag推送到远程 获取远程tag ...

  5. [Twisted] 事件驱动模型

    在事件驱动编程中,多个任务交替执行,并且在单一线程控制下进行.当执行I/O或者其他耗时操作时,回调函数会被注册到事件循环. 当I/O完成时,执行回调.回调函数描述了在事件完成之后,如何处理事件.事件循 ...

  6. iOS与服务器端 GZip压缩问题

    昨天搞了一天的GZip压缩,试了三种方式(libz库,ZipArchive,ASIHttpRequest),一开始都不成功.理论上三个应该都能用的,但我都不行.等我试到第三种方式的时候才知道,不是我的 ...

  7. ios专题 -线程互斥与同步

    [原创]http://www.cnblogs.com/luoguoqiang1985 今天遇见了这问题,决定要需要讨论下. 线程同步的方法: @synchronized 官方文档解释:The @syn ...

  8. SGU Volume 2

    SGU200.Cracking RSA------------------------★高斯消元 SGU207.Robbers -------------------------------数论 SG ...

  9. Linux的more、less

    2.more 文件内容或输出查看工具: more 是我们最常用的工具之一,最常用的就是显示输出的内容,然后根据窗口的大小进行分页显示,然后还能提示文件的百分比: de>[root@localho ...

  10. c++预编译问题:fatal error C1083: Cannot open precompiled header file: 'Debug/DllTest.pch': No such file or d

    1)单独编译StdAfx.cpp 2)编译所有(即按Ctrl+F7) 这时因为该模块没有包括预编译头文件“stdafx.h”的缘故.VC用一个stdafx.cpp包含头文件stdafx.h,然后在st ...