关于oracle中的in 和 exist

来源:互联网 发布:mac如何看电池损耗 编辑:程序博客网 时间:2024/06/06 00:22

有时候会将一列和一系列值相比较。最简单的办法就是在where子句中使用子查询,在where子句中可以使用两种格式的子查询

1、 使用in操作符

2、 使用exist操作符

第一种格式比较容易编写,第二种格式要比第一种格式执行效率高。在oracle中几乎可以将所有的in操作符子查询改写为使用exist的子查询

In与exist的区别:

运用exist子句不管子查询从表中抽取什么数据它只查看where子句。这样优化器就不必遍历整个表而仅根据索引就可以完成工作(这里假定在where语句中使用的列存在索引)。相对应in子句来说,exist使用相连子查询,构造起来要比in子查询困难一些。

通过使用exist,oracle系统会首先检查主查询,然后运行子查询知道它找到第一个匹配项,这就节省了时间。

Oracle系统在执行in子查询时,首先执行子查询,并将获得的结果列表存放在一个加了索引的临时表中。在执行子查询之前,系统会先将主查询挂起,待子查询执行完毕,存放在临时表中以后再执行主查询。这也就是使用exist比使用in 通常查询速度快的原因

注:Not in 里面有空值,查询出得结果一定是空值

原创粉丝点击