select t1.name from table1 t1 where t1.id in (select t2.id from table2 t2 where  t2.age > 20)select t1.name from table1 t1 , table2 t2 where t1.id = t2.id and t2.age > 20select t1.name from table1 t1 where exist (select * from table2 where t1.id = t2.id and t2.age > 20)
这三个SQL语句的执行结果一样吗 不考虑效率 table1 和table2 主键都是id???
还有如果一样 三个哪个效率最高呢。谢谢回答的朋友

解决方案 »

  1.   

    主键都是id 执行结果 结果一样的 效率也是一样的说点题外话
     如果 table2 id 或者 (t2.id ,t2.age ) 不唯一 , 
      执行结果 结果不一样的  1,3 一样  2有所不同如果 table2 id 没有唯一约束的话  10g 效率还是一样的  
      

  2.   

    IN适合于外表大而内表小的情况;EXISTS适合于外表小而内表大的情况。
    内联还是相对最快的
      

  3.   

    IN适合于外表大而内表小的情况;EXISTS适合于外表小而内表大的情况
      

  4.   

    呵呵 没说清楚 
    主键都是id  优化器 会把转成 
    简单连接 效率是一样的
    10G时 不是唯一 也是一样的 
     唯一默认 执行计划如下
     
    0 SELECT STATEMENT Optimize=ALL_ROWS 
    1 HASH JOIN
    2 TABLE ACCESS (FULL) OF 'TABLE2'
    3 TABLE ACCESS (FULL) OF 'TABLE1'10G 不时唯一默认 执行计划如下
     
    0 SELECT STATEMENT Optimize=ALL_ROWS 
    1 HASH JOIN(RIGHT SEMI)
    2 TABLE ACCESS (FULL) OF 'TABLE2'
    3 TABLE ACCESS (FULL) OF 'TABLE1'
      

  5.   

    应该如4楼所说,2最高,3其次,1最差
    3中的exists中不应该  select * 改为 select 'Z'  //就是任意1个常量