exists 是Oracle sql中的一个函数。表示是否存在符合某种条件的记录。如

select * from A,B 
where A.id=B.id 
and exists (SELECT * 
FROM A 
WHERE A.type LIKE 'S%')

它和Oracle的另外一个函数IN很相似,你可以比较一下他们的用法,见下:

1 性能上的比较比如Select * from T1 where x in ( select y from T2 )
执行的过程相当于:
select * 
from t1, ( select distinct y from t2 ) t2
where t1.x = t2.y;
即分别先查寻两个表,对做联合查询(本质联合查询)
相对的

select * from t1 where exists ( select null from t2 where y = x )
执行的过程相当于:
for x in ( select * from t1 )
loop
if ( exists ( select null from t2 where y = x.x )
then 
OUTPUT THE RECORD
end if
end loop
表 T1 不可避免的要被完全扫描一遍

即循环外表,在逐个比较内表

分别适用在什么情况?
以子查询 ( select y from T2 )为考虑方向
如果子查询的结果集很大需要消耗很多时间,但是T1比较小执行( select null from t2 where y = x.x )非常快,那么exists就比较适合用在这里
相对应得子查询的结果集比较小的时候就应该使用in.

以后要注意凡是这样的比较问题,一般答案都不是绝对的,要分情况

in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。一直以来认为exists比in效率高的说法是不准确的。
如果查询的两个表大小相当,那么用in和exists差别不大。

如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in:

---转载自http://blog.csdn.net/hakunamatata2008/article/details/4239831

oracle中exists和in的比较相关推荐

  1. oracle中exists和not exists用法(包含经典例题:查看学了所有课程的同学的信息的通俗易懂解释)

    1.基本概念: select * from A where not exists(select * from B where A.id = B.id); select * from A where e ...

  2. oracle中exists连接两个表,IN、EXISTS、多表连接,哪个速度更快

    本帖最后由 ghsau 于 2011-10-11 23:39 编辑 请看下面三个执行计划(Oracle10g) 1.  用IN SQL> select ename from emp e wher ...

  3. oracle中exists ,not exists用法

    sql: SELECT c.CustomerId,CompanyName FROM Customers c WHERE EXISTS(SELECT OrderID FROM Orders o WHER ...

  4. Oracle中exists与in的效率探讨

    in 与 exist 的语法比较:           select × from 数据表 t where t.x in (...)       括号内可以是符合t.x字段类型的值集合,如('1',' ...

  5. ORACLE中exists与in的区别

    --exists支持字段为空 select * from t_flight_info a where not exists (select * from M_CITY_PAIR where a.ade ...

  6. oracle中的exists 和 not exists 用法详解

    from:http://blog.sina.com.cn/s/blog_601d1ce30100cyrb.html oracle中的exists 和 not exists 用法详解 (2009-05- ...

  7. Oracle中的 IN, NOT IN和 EXISTS, NOT EXISTS的區別

    Oracle中的 IN, NOT IN和 EXISTS, NOT EXISTS的區別 通常聽到的都是說盡量用exists不要用in,因為exists只判斷存在而in需要對比值,所以exists比較快, ...

  8. oracle中exist什么意思,oracle中not exists 是什么意思 , oracle数据库中exists的作用

    导航:网站首页 > oracle中not exists 是什么意思 , oracle数据库中exists的作用 oracle中not exists 是什么意思 , oracle数据库中exist ...

  9. 1.oracle中的exists 和not exists 用法:

    1.oracle中的exists 和not exists 用法: exists (sql 返回结果集为真) not exists (sql 不返回结果集为真) 如下: 表A ID NAME 1 A1 ...

  10. Oracle中merge into的使用

    http://blog.csdn.net/yuzhic/article/details/1896878 http://blog.csdn.net/macle2010/article/details/5 ...

最新文章

  1. dataframe for 循环 数据格式 python_Python中的for循环
  2. PMCAFF微课堂(已结束) | 典典养车新媒体负责人亲授:如何运营百万级企业服务号
  3. 人工智能 | 自动驾驶与人工智能前沿研究报告(概念篇)
  4. ubuntu14.04设置静态IP
  5. [css] 说说position的absolute和fixed共同与不同点分别是什么?
  6. leetcode - 226. 翻转二叉树
  7. java递归查询无限极分类_sqlserver实现树形结构递归查询(无限极分类)的方法
  8. 直播卖货到底是不是卖人设?
  9. python数据类型:序列(字符串,元组,列表,字典)
  10. ORACLE数据库的模式对象的管理与维护
  11. 在不受支持的 Mac 上安装 macOS Ventura、Monterey、Big Sur (OpenCore Legacy Patcher)
  12. 重磅,12306抢票小助手开源了!
  13. Unity 打包APK 适配全面屏、刘海屏、水滴屏、挖孔屏
  14. 新版标准日本语高级_第19课
  15. python四种抽样方法的使用:随机抽样、聚类抽样、系统抽样、分层抽样
  16. 如何从ip服务器所用系统,如何从0开始打造一个深度学习服务器?
  17. android双清步骤,安卓刷机前双清如何操作?华为荣耀3C双清的过程
  18. SmartBi各类图形及其echarts的js代码
  19. hp服务器系统管理软件,惠普raid管理软件
  20. 科学计算机bug,EMUI小助手:计算器百分比计算出bug?真相在这儿!

热门文章

  1. 第一章计算机基础知识作业答案,计算机基础作业题1答案
  2. 乡村少年宫计算机室活动方案,社区乡村农村少年宫活动方案少儿培训开展情况...
  3. aix linux tcp连接数,修改windows、linux、aix等系统TCP/IP 参数
  4. activiti工作流 php,码云社 | 砺锋科技-SpringBoot整合Activiti工作流(附源码) - 用代码改变世界...
  5. aggregate()函数--R语言
  6. centos7安装RabbitMQ详细过程
  7. 推荐一个ajax控件项目 ajax data control
  8. Zabbix中文使用手册
  9. 修炼Python基础篇-字典(Dictionary)学习
  10. IE10、IE11 ASP.Net 网站无法写入Cookie 问题