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. C#中的两种debug方法

    这篇文章主要介绍了C#中的两种debug方法介绍,本文讲解了代码用 #if DEBUG 包裹.利用宏定义两种方法,需要的朋友可以参考下   第一种:需要把调试方法改成debug代码用 #if DEBU ...

  2. RedHat7搭建Nginx+Apache+PHP

    Nginx做为前端服务器(本机IP:192.168.136.104),将访问PHP页面的动态请求转发给Apache服务器(只监听本地回环地址172.0.0.1:80) 安装Apache# yum -y ...

  3. jquery.validate中使用remote,remote相同值不校验问题解决

    jquery.validate中使用remote, remote相同值不校验问题解决 >>>>>>>>>>>>>>& ...

  4. replace()、replaceFirst()和replaceAll()的区别

    1.replace() String str= "mesquite in your cellar" str.replace('e', 'o') returns "mosq ...

  5. SQL循环+游标

    /****** Script for SelectTopNRows command from SSMS  ******/use DB  declare @id bigint   DECLARE cur ...

  6. java - 异常浅谈

    java提供异常处理机制中,可以分为RuntimeException和checked Exception两种. RuntimeException 是运行时异常,是程序本身无法解决的.例如,对于一个用户 ...

  7. 在mipsel-linux平台上的编译应用SQLite-3.5.9

    sqlite 第一个Alpha版本诞生于2000年5月,是实现了SQL 92标准的一个大子集的嵌入式数据库,其以在一个库中组合了数据库引擎和接口,能将所有数据存储于单个文件中.官方测试表明sqlite ...

  8. Python:元组(tuple)

    #!/usr/bin/python3 #元组 tup1 = ('Google', 'Runoob', 1997, 2000) print(type(tup1)) print("tup1 &q ...

  9. jquery之分页插件smartpaginator

    今天推荐一个分页工具条插件:Smart Paginator,这个插件用途还是很广的,而且可定制性相当不错,目前内置三种颜色,有需要的话,可以自己改css定制颜色 1.如何使用Smart Paginat ...

  10. 关于sqlserver2012重启后ID自增1000的问题解决方案

    1. Open "SQL Server Configuration Manager" 2. Click "SQL Server Services" on the ...