关于Oracle中exists和in的区别

Oracle数据库为例

1 exists的使用

Exists用于只能用于子查询,可以替代in,若匹配到结果,则退出内部

查询,并将条件标志为true,传回全部结果资料,in不管匹配到匹配不到都

全部匹配完毕,使用exists可以将子查询结果定为常量,不影响查询效果,

而且效率高。如查询所有销售部门员工的姓名,对比如下:

IN is often better if the results of the subquery are very small

When you write a query using the IN clause, you're telling the rule-based optimizer that you

want the inner query to drive the outer query.

When you write EXISTS in a where clause, you're telling the optimizer that you want the outer

query to be run first, using each value to fetch a value from the inner query.

In many cases, EXISTS is better because it requires you to specify a join condition, which can

invoke an INDEX scan. However, IN is often better if the results of the subquery are very

small. You usually want to run the query that returns the smaller set of results first.

In和exists对比:

若子查询结果集比较小,优先使用in,若外层查询比子查询小,优先使

用exists。因为若用in,则oracle会优先查询子查询,然后匹配外层查询,

若使用exists,则oracle会优先查询外层表,然后再与内层表匹配。最优化

匹配原则,拿最小记录匹配大记录。

在看下官网文档里怎么说:

首先看下语法,语法很简单,一看例子大家都会明白,但一定要注意Operation里面的那句话很重要,因为这样关系到null的问题,是返回至少一行就返回true值。

2 not exists的使用

与exists 含义相反,也在子查询中使用,取出不满足条件的,not in有一

定的区别,注意有时候not exists不能完全替代not in

可以看下面的例子,注意not in的检索是从外部查询逐条匹配子查询的检索出所有的元素。匹配相等就返回true,就会输出一条元素。而not exists就不是这个搜索原理了,他是看返回的元素个数如果针对not exists返回的元素为0则为真,所以会保留Null值。

可以看下以下的例子:

 

elvis

2012.12.24

知识共享~共同进步

转载请注明:

 http://blog.csdn.net/elvis_dataguru/article/details/8426886

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值