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

高手们有没有人讲详细点的,我想问下,oracle数据库里in 和exits 到底有什么区别?
最新回答
々依恋瑾滢妍

2024-10-17 16:41:35

表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时 小表在前大表在后
重温那逝去的记忆

2024-10-17 20:23:50

完全用于不同场合的东西啊。
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谓词。
那一抹浅笑

2024-10-17 10:42:51

你可以看看sql语句优化相关的问题,一般sql语句优化将用exits代替in
偶遇制造者

2024-10-17 13:51:40

http://wenku.baidu.com/view/f1606008844769eae009edbd.html