表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谓词。