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. Pivotal Cloud Foundry学习笔记(1)

    PCF是一个PAAS平台 注册PCF账号 https://account.run.pivotal.io/sign-up 安装cf CLI 访问 https://console.run.pivotal. ...

  2. jsp获取服务端的访问信息

    获取服务端访问信息 public static String getUrl(HttpServletRequest request){ String url = ""; if(req ...

  3. apache日志介绍

    apache日志介绍:    通用日志格式: CommonLogFormat    组合日志格式: CombinedLogFormat    例如:        <VirtualHost *: ...

  4. 当append里面的标签显示不出来的时候,用下面的方式做

     $("#result_td").append(tem1+tem3)  $("#result_td").append($(tem1+tem3)) 

  5. CSS background-position随笔

    1.定义和用法 background-position 属性设置背景图像的起始位置. 这个属性设置背景原图像(由 background-image 定义)的位置,背景图像如果要重复,将从这一点开始. ...

  6. 【转】NHibernate入门教程

    开源框架完美组合之Spring.NET + NHibernate + ASP.NET MVC + jQuery + easyUI 中英文双语言小型企业网站Demo 摘要: 热衷于开源框架探索的我发现A ...

  7. cmake简易教程

    用cmake替代makefile,构建项目还是蛮简单实用的. 工程目录下src放源代码,build保存所有的编译过程和结果. 首先看看src目录下的源代码结构: 最顶层CMakeLists.txt内容 ...

  8. C#如何释放已经加载的图片 (转)

    使用Image.FromFile取磁盘上的图片时,这个方法会锁定图片文件,而且会导致内存占用增大, 有几种方法解决: 一:将Image类转换成Bitmap类 System.Drawing.Image ...

  9. js 中对象属性特性的描述

    如何自定义属性的特性? 用对象.属性的特性和自定义的属性的特性有什么区别? 它的四大特性 writable   enumerable   configable   有什么区别? 先预习一个用对象.属性 ...

  10. Curl 采集乱码 gzip 原因及解决方案 utf-8

    用curl获取一个经过gzip压缩后的网页时返回乱码 原因大体就是服务器返回的Content-Encoding的值和网页的编码不同,造成curl解码出问题,直接将gzip或deflate编码的文件下载 ...