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. Bash中的$符号

    脚本名称:$0 PID:$$ 参数个数:$# 脚本返回值:$? 第x个参数:$x 第10个以上的参数加大括号:${10} 所有参数:$@ #!/bin/bash echo "The prog ...

  2. Mybaitis配置总结

    在mybatis-config.xml中配置分页插件,插件配置必须放在mapper前面 <plugins> <plugin interceptor="com.rrtong. ...

  3. C#发送邮件-C#教程

    如何利用C#实现邮件发送功能?闲话不多说请看代码: public static void SendMail(MyEmail email){//发送验证邮箱邮件.//1.创建邮件MailMessage ...

  4. c# HttpWebRequest与HttpWebResponse 绝技(转载)

    c# HttpWebRequest与HttpWebResponse 绝技    如果你想做一些,抓取,或者是自动获取的功能,那么就跟我一起来学习一下Http请求吧.本文章会对Http请求时的Get和P ...

  5. .NET下的加密解密大全(1): 哈希加密

    .NET有丰富的加密解密API库供我们使用,本博文总结了.NET下的Hash散列算法,并制作成简单的DEMO,希望能对大家有所帮助. MD5[csharp]using System; using Sy ...

  6. 查看当前linux系统位数

    linux系统也有位数之分,所以在linux上安装一些软件,比如jdk之类的就需要注意下版本. 查看linux系统位数最简单的命令(这里以redhat为例,不同版本linux命令也许不同) 命令1:g ...

  7. SQLITE和QT

    sqlite3数据库支持事务 例如: BEGIN DEFERRED TRANSACTION; INSERT INTO main.test_transaction (test_unique) VALUE ...

  8. PHP程序开发人员要掌握的知识

    文件目录处理函数包80%以上的函数的功能的灵活运用. 日期时间函数中的80%以上的函数的功能的灵活运用 数学函数库中的100%的内容. 网络库中的60%以上的内容,对各个函数的功能比较熟悉. 字符串处 ...

  9. clipboard让复制的文本换行

    https://clipboardjs.com/dist/clipboard.min.js 用clipboard实现复制时, 想让复制的文本换行, 有两咱方法: 第一种, HTML实现: <!- ...

  10. gnome中文翻译之po

    文件类型: po: 用msginit分析pot文件,生成各语言对应的po文件,比如中文的zh_CN.po. mo: 用msgfmt将po文件编译生成mo文件,这是二进制文件,不能直接编辑. gmo: ...