书写sql语句的时候,有时候会用到where exists(select 1 from A where ......),什么时候会必须要用到exists呢?不可以在where条件中以多个表主键和外键相关联的形式吗?还有下面的三个sql语句有什么区别:
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);
3: select * from T1,T2 where T1.a = T2.a;

解决方案 »

  1.   

    1.exists 与 in可以互相转换,当in后边的集合比较大时,用exists效率会高;
    2.同上
    3.如果t1,t2可以一对一关联,也可以与1.2互相转换,否则这样连接会造成笛卡尔积。
      

  2.   

    在SQL中,简单的说exist判断查询结果是否为空集,而in是两个集合之间的包含关系。传统上认为,如果子查询的条件更具选择性就用in;而如果父查询(外层查询)的条件更具选择性就用exist。
      

  3.   

    用exist 明显要快一些啊,尤其查询字表数据大的时候
      

  4.   

    现在的RDB优化器都是用cbo,SQL语法只是形式而已,关键得看explain plan。
      

  5.   

    select * from T1 where exists(select 1 from T2 where T1.a = T2.a);
    这句话看不懂