oracle数据库里in 和exits 到底有什么区别? 20

 我来答
yu8196378
推荐于2017-05-21 · 超过16用户采纳过TA的回答
知道答主
回答量:59
采纳率:0%
帮助的人:30.7万
展开全部
表A(小表),表B(大表)
select * from B where cc in (select cc from A) 这个语句中是先从A表中把cc找出来,然后根据cc再在B中去找相关的cc 由于A表的cc远小于B表的cc 所以可以节省时间
select * from B exists (select cc from A where cc=B.cc)这句话是先从B表里把cc找出来 然后再在A表里找相关的cc 由于B表的cc远多于A表的cc 所以这样做很浪费时间

总结: 用in 时 大表在前小表在后
用exists时 小表在前大表在后
zlalijie
2012-11-11 · 超过11用户采纳过TA的回答
知道答主
回答量:21
采纳率:0%
帮助的人:36万
展开全部
完全用于不同场合的东西啊。
in其实等同于 where col=v1 or col=v2 or col=v3 ....,只不过用in更方便。(注意:null除外)
exists其实等同于表关联后,只取主表部分内容而已,相当于:select distinct maintb_cols from maintb,subtb where xxxxxx,当然,没人会这么些,太别扭,所以oracle才提供了exists与not exists谓词。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
樹葉風
2012-11-09
知道答主
回答量:51
采纳率:0%
帮助的人:17.6万
展开全部
你可以看看sql语句优化相关的问题,一般sql语句优化将用exits代替in
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
micro0369
2012-11-09 · TA获得超过1.2万个赞
知道大有可为答主
回答量:9250
采纳率:85%
帮助的人:4085万
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式