首页 > 数据库 > Oracle > Oracle中IN与EXISTS的对比分析 zz
在Oracle中,经常会被到底用EXISTS还是用IN而困惑,下面简单说明 “exists”和“in”的区别
先看两个例子:
1) select * from T1 where exists(select 1 from T2 where T1.a=T2.a) ;
2) select * from T1 where T1.a in (select T2.a from T2) ;
exists 用法:
1)中“select 1 from T2 where T1.a=T2.a” 是一个关联表查询,相当于
“select 1 from
T1,T2
“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字段表达的意义应该是一样的。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/21414290/viewspace-1115451/ ,如需转载,请注明出处,否则将追究法律责任。