在Oracle中,经常会被到底用EXISTS还是用IN而困惑,下面简单说明 “exists”和“in”的区别
先看两个例子:
1) select * from T1 where exists(select 1 from T2 where T1.a=T2.a) ;
T1数据量小而T2数据量非常大时,T1<<T2 时,1) 的查询效率高。
2) select * from T1 where T1.a in (select T2.a from T2) ;
T1数据量非常大而T2数据量小时,T1>>T2 时,2) 的查询效率高。
exists 用法:
1)中“select 1 from T2 where T1.a=T2.a” 是一个关联表查询,相当于
“select 1 from T1,T2 where T1.a=T2.a”
“exists(xxx)”就表示括号里的语句能不能查出记录,它要查的记录是否存在。
因此“select 1”这里的 “1”其实是无关紧要的,换成“*”也没问题,它只在乎括号里的数据能不能查找出来,是否存在这样的记录,如果存在,这 1) 句的where 条件成立。
in 的用法:
2)中 “select * from T1 where T1.a in (select T2.a from T2) ”
这里的“in”后面括号里的语句搜索出来的字段的内容一定要相对应,就是说,T1和T2这两个表的a字段表达的意义应该是一样的。
in和exist的区别
从sql编程角度来说,in直观,exists不直观多一个select,
in可以用于各种子查询,而exists好像只用于关联子查询
从性能上来看
exists是用loop的方式,循环的次数影响大,外表要记录数少,内表就无所谓了
in用的是hash join,所以内表如果小,整个查询的范围都会很小,如果内表很大,外表如果也很大就很慢了,这时候exists才真正的会快过in的方式。
not in和not exists的区别
not in内外表都进行全表扫描,没有用到索引;
not extsts 的子查询能用到表上的索引。
所以推荐用not exists代替not in
不过如果是exists和in就要具体看情况了
本文来自CSDN博客:http://blog.csdn.net/loren_chao/archive/2008/03/19/2198005.aspx
分享到:
相关推荐
在Oracle数据库中,`IN`、`EXISTS`、`NOT IN` 和 `NOT EXISTS` 是四个常用的子查询操作符,它们在SQL查询语句中扮演着不同的角色,且各有其性能特点。以下是对这些操作符的详细分析和比较。 1. `IN` 操作符: `IN` ...
IN、EXISTS、NOT IN、NOT EXISTS 是 SQL 中四种常用的条件判断运算符,它们之间的区别主要体现在使用场景、执行效率和语法结构上。 IN IN 是一种条件判断运算符,用于判断某个值是否存在于一个列表中。其基本语法...
Oracle 中 EXISTS 和 IN 的效率问题详解 EXISTS 和 IN 都是 Oracle 中的集合操作符,但它们在使用和执行效率上有所不同。本文将深入探讨 EXISTS 和 IN 的使用场景、执行机制和效率问题。 EXISTS 的使用场景和机制 ...
### Oracle数据库中Exists与In的使用详解 #### 一、Exists 的使用方法 在Oracle数据库中,`EXISTS` 是一种常用的子查询操作符,用于判断子查询是否有结果返回。如果子查询至少返回一行数据,则 `EXISTS` 表达式的...
在Oracle数据库中,`MINUS`、`IN` 和 `EXISTS` 是三种不同的SQL查询操作符,它们各自用于特定的数据处理场景。了解并熟练掌握这些操作符对于优化查询性能和编写复杂的SQL语句至关重要。 1. **MINUS 操作符** `MINUS...
【描述】:文章并未直接提供描述,但从标题推测,该内容可能涉及数据库查询优化,特别是关于`not in`和`not exists`两种SQL查询子句的不同使用方式和性能比较。 【标签】:SQL优化,查询性能,数据库管理 【正文】...
在Oracle数据库中,`NOT EXISTS` 子句常用于查询中,以排除某些特定条件的记录。然而,它对查询性能的影响可能并不总是直观的,尤其是在涉及到外层查询时。本文将深入探讨`NOT EXISTS`如何影响外层查询,并通过示例...
在Oracle数据库中,`IN`和`EXISTS`都是用于子查询的比较操作符,但它们在执行方式和性能上存在显著差异。许多人误以为`EXISTS`总是比`IN`更快,但实际情况并非如此,具体表现取决于数据的分布和索引的利用。 1. **...
Oracle PL/SQL 开发人员试题...本资源涵盖了 Oracle PL/SQL 中的多个重要概念和语句,包括子查询、NOT IN 语句、EXISTS 语句、IN 语句和 ROWNUM 语句等。这些概念和语句是 Oracle PL/SQL 开发人员必须掌握的基本技能。
- 结合使用`IN`和`NOT IN`可以精确控制查询条件,如`SELECT * FROM tb_name WHERE id IN (10,12,15,16) AND NOT id IN (21,22,23)`,这将返回id在第一个列表但不在第二个列表的记录。 2. `EXISTS/NOT EXISTS`: -...
本文将详细地介绍 Oracle 语句优化的方法和技巧,涵盖多表关联、EXISTS 和 IN 语句的使用、INDEX_JOIN 优化、WHERE 和 HAVING 语句的区别、NOT IN 和 <> 操作符的使用、LIKE 操作符的替代、UNION 操作符的优化、SQL ...
oracle 判断表 是否存在.亲自手写可用才上传的。
8. **用NOT EXISTS替换NOT IN**:在否定子查询中,NOT EXISTS通常比NOT IN快,因为NOT EXISTS只需检查是否存在匹配项,而NOT IN可能需要遍历整个子查询结果。 这些技巧可以帮助数据库管理员和开发人员优化Oracle ...
NOT IN和NOT EXISTS的情况类似,需要根据具体场景选择合适的方法。 总的来说,这本手册提供了全面的Oracle数据库编程和调优实践指南,对于想要提升数据库性能的专业人士来说,是不可或缺的学习资料。它强调了正确...
例如,在Oracle中,可以使用IN、EXISTS、NOT EXISTS等关键字来实现Subquery,而在MySQL中,则使用IN、EXISTS等关键字。 索引 索引是数据库性能优化的重要手段。Oracle和MySQL都支持创建索引,但是它们在创建索引时...
使用NOT EXISTS代替NOT IN可以提高效率。 - **示例**:查询没有订单的客户信息: - 低效:`SELECT * FROM CUSTOMER WHERE CUST_ID NOT IN (SELECT CUST_ID FROM ORDER)` - 高效:`SELECT * FROM CUSTOMER WHERE ...
not exists则相反 它所在的查询属于相关子查询,即子查询的查询条件依赖于外层父查询的某个属性值,处理过程一般为: 取外层查询的第一个元组,根据它与内层查询相关的属性值处理内层查询,若where子句返回true,则...