日期:2014-05-17  浏览次数:20895 次

oracle SQL语句中的exists
书写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.exists 与 in可以互相转换,当in后边的集合比较大时,用exists效率会高;
2.同上
3.如果t1,t2可以一对一关联,也可以与1.2互相转换,否则这样连接会造成笛卡尔积。
------解决方案--------------------
在SQL中,简单的说exist判断查询结果是否为空集,而in是两个集合之间的包含关系。传统上认为,如果子查询的条件更具选择性就用in;而如果父查询(外层查询)的条件更具选择性就用exist。