一般认为EXISTS要快些,因为只要子查询中有记录就可以中止子查询。

解决方案 »

  1.   

    select * from tablename where exists(select * from tablename where ……)select * from tablename where cardid in (select cardid from tablname)
      

  2.   

    并运算
    select c1,c2 from t1
    union all
    select c1,c2 from t2差:
    c1-c2:select * from t1 where not exists(select 1 from t2 where t1.c1=t2.c1 and t1.c2=t2.c2)c2-c1:select * from t2 where not exists(select 1 from t1 where t1.c1=t2.c1 and t1.c2=t2.c2)交:
    select * from t1 where exists(select 1 from t2 where t1.c1=t2.c1 and t1.c2=t2.c2)
    )
      

  3.   

    exists你可以直接理解为“存在”的意思,
    放在WHERE后面,就是说只要你的exists后面的语句有值,就表示为逻辑真,否则为假!
    和IN有很大的区别,IN后面的参数通常是具体的值,但不是逻辑值,通常IN理解为包含。
    EXISTS只是作为简单的逻辑判断,不对其后的SELECT语句作穷举罗列,通常只要找到第一个符合条件的值便不再往下继续搜索,条件的值这时便已经为真了!
      

  4.   

    EXISTS 和 = ANY 的查询
    EXISTS 和 IN  都返回相同的结果信息
      

  5.   

    如果查询分析器不做优化,那么,in 和 exists 的执行过程完全不同。in中首先执行后边的子查询,建立过程中的内部临时表;exists 则是针对前边每一个查询出的记录,都执行后边的子查询一次(相当于循环),但是,子查询在查到第一条结果时既结束。根据数据量和索引的不同,效率不同。
      

  6.   

    一般来说,如果建立了正确的索引,那么exists比in快。in的方法突出了数学的集合运算的观点,exists的方法更适合学过一阶逻辑的人。