半联结 和 反联结是 oracle 优化器能够选择用来在获取信息时应用的两个密切相关的联结方法(实际上是联结方法的选项)

半联结

IN 的半联结

select /* using in */ department_name

from hr.departments dept

where department_id IN (select department_id from hr.employees emp);

EXISTS 半联结

select /* using exists */ department_name

from hr.departments dept

where EXISTS(select null from hr.employees emp where emp.department_id = dept.department_id);

EXISTS 和 IN 的可替换语法

select /* inner join */ department_name

from hr.departments dept, hr.employees emp

where dept.department_id = emp.department_id;

控制半联结执行计划

半联结 实际上就是双层for循环, 注意下边的: NESTED LOOPS SEMI (半联结的标志)

使用提示控制半联结执行计划

SEMIJOIN - 进行半联结

NO_SEMIJOIN - 不进行半联结

例如:

select /* exists no_semijoin */ department_name

from hr.departments dept

where exists (select /*+ no_semijoin */) null from hr.employees emp where emp.department_id = dept.department_id);

因为我们提供了 no_semijion 的提示, 所以, 执行计划中就没有在使用半联结, 而是使用了 filter(exists (select o from ))

反联结

总结: 实际上, 以上的联结, 我都有在前面的 table join 类型时 有单独拿出来讲过, 所以, 这里不在详细说明.

总结的结果就是, 由于我们使用的优化器一般都是基于成本的, 所以, 只使用 EXISTS 和 外连接 两种.

11 半联结 & 反联结的更多相关文章

  1. 半联结&反联结!

    半联结是在两个数据集(表)之间的联结,其中第一个数据集中的数据行在决定是否返回时会根据在另一个数据集中出现或不出现至少一个相匹配的数据行来确定.“不出先”匹配行——这是半联结的一种特殊形式,称为反联结 ...

  2. C++11 半同步半异步线程池的实现

    #include <list> #include <mutex> #include <thread> #include <condition_variable ...

  3. 《精通Oracle SQL(第2版)》PDF

    一:下载途径 二:图书图样 三:目录 第1章 SQL核心 1.1 SQL语言 1.2 数据库的接口 1.3 SQL*Plus回顾 1.3.1 连接到数据库 1.3.2 配置SQL*Plus环境 1.3 ...

  4. 《精通Oracle SQL(第2版) 》

    <精通Oracle SQL(第2版) > 基本信息 作者: (美)Karen Morton    Kerry Osborne    Robyn Sands    Riyaj Shamsud ...

  5. SQL 必知必会·笔记<11>创建高级联结

    1. 使用表别名 SQL 除了可以对列名和计算字段使用别名,还允许给表名起别名.这样 做有两个主要理由: 缩短SQL 语句: 允许在一条SELECT 语句中多次使用相同的表. 使用表别名示例: SEL ...

  6. SQL联结笔记(内联结,自联结,自然联结,外联结区别以及应用)

    SQL中有三种联结,分别是:内联结,自然联结,外联结. 联结是针对不同表联合起来的一种方式.应用的对象是:表(table) 为了方便验证练习理解,首先展示所要用到的表的内容: 1.Customers表 ...

  7. 读书笔记--SQL必知必会13--创建高级联结

    13.1 使用表别名 SQL可以对列名.计算字段和表名起别名. 缩短SQL语句 允许在一条SELECT语句中多次使用相同的表. 注意:表别名只在查询执行中使用,不返回到客户端. MariaDB [sq ...

  8. SQL学习之高级联结(自联结、自然联结、外联接)

    create table Customers( Id ,), Company ) null, Name ) null ) insert into Customers values('Fun4All', ...

  9. SQL反模式学习笔记11 限定列的有效值

    目标:限定列的有效值,将一列的有效字段值约束在一个固定的集合中.类似于数据字典. 反模式:在列定义上指定可选值 1. 对某一列定义一个检查约束项,这个约束不允许往列中插入或者更新任何会导致约束失败的值 ...

随机推荐

  1. VS 6.00 工程项目文件详解

    *.dsp(DeveloperStudio Project):是VC++的工程配置文件,比如说你的工程包含哪个文件,你的编译选项是什么等等,编译的时候是按照.dsp的配置来的.*.dsw(Develo ...

  2. ACE的接受器(Acceptor)和连接器(Connector):连接建立模式

    ACE_Acceptor工厂的open()方法,或是它的缺省构造器(它实际上会调用open()方法),来开始被动侦听连接.当接受器工厂的open()方法被调用时,如果反应堆单体还没有被实例化,open ...

  3. Asp.net Vnext IValueProvider

    概述 本文已经同步到<Asp.net Vnext 系列教程 >中] IValueProvider 根据ValueProvider获取数据,在对数据进行绑定 代码实现 private cla ...

  4. 每日一九度之 题目1040:Prime Number

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:6732 解决:2738 题目描述: Output the k-th prime number. 输入: k≤10000 输出: The k- ...

  5. Linux hrtimer分析(一)

    http://blog.csdn.net/angle_birds/article/details/17375883 本文分析了Linux2.6.29中hrtimer的实现. Linux2.6中实现了一 ...

  6. css3 简单动画

    <script> <!-- var x,y,n=0,ny=0,rotINT,rotYINT function rotateDIV() { x=document.getElementB ...

  7. Ahui Writes Word

    Ahui Writes Word Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) To ...

  8. Maya Calendar 分类: POJ 2015-06-11 21:44 12人阅读 评论(0) 收藏

    Maya Calendar Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 70016   Accepted: 21547 D ...

  9. java 导入自定义类

    eclipse导入很容易,昨天上课学了一下用记事本写java,导入自定义类,这就麻烦了. 代码贴一下,方便操作: package tom.jiafei; public class SquareEqua ...

  10. HDU(3555),数位DP

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=3555 Bomb Time Limit: 2000/1000 MS (Java/Others ...