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???
还有如果一样 三个哪个效率最高呢。谢谢回答的朋友
这三个SQL语句的执行结果一样吗 不考虑效率 table1 和table2 主键都是id???
还有如果一样 三个哪个效率最高呢。谢谢回答的朋友
如果 table2 id 或者 (t2.id ,t2.age ) 不唯一 ,
执行结果 结果不一样的 1,3 一样 2有所不同如果 table2 id 没有唯一约束的话 10g 效率还是一样的
内联还是相对最快的
主键都是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'
3中的exists中不应该 select * 改为 select 'Z' //就是任意1个常量