select t1.a ,t2.b 
from t1 ,t2 
where t1.a = t2.b and t1.a=变量aSQL语句的执行顺序是先执行t1.a = t2.b 再执行t1.a=变量a 吗?谢谢!

解决方案 »

  1.   

    从右到左。
    btw:楼主的语句好奇怪,要查什么?
      

  2.   

    我一直都是认为从右到左,
    就是说t1.a=变量a检索到一仆结果集
    再进行t1.a = t2.b的连结
    应该是这样的吧?
      

  3.   

    ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾. 
    例如: 
    (低效,执行时间156.3秒) 
    SELECT ... FROM EMP E  
    WHERE SAL > 50000 AND JOB = ‘MANAGER'  AND 25 < (SELECT COUNT(*) FROM EMP WHERE MGR=E.EMPNO); (高效,执行时间10.6秒) 
    SELECT … FROM EMP E 
    WHERE 25 < (SELECT COUNT(*) FROM EMP WHERE MGR=E.EMPNO) AND SAL > 50000 AND JOB = ‘MANAGER'; 
      

  4.   

    嗯。有索引时,系统会对SQL语句优化,看看执行计划。
      

  5.   

    如果优化器模式设置为choose,Oracle将根据SQL语句相关表索引的有无,统计资料的有无以及SQL语句中的提示,自动判断使用哪种优化模式
      

  6.   

    如果使用基于成本的优化器cost , 你必须经常运行analyze 命令,以增加数据库中的对象统计信息的准确性
      

  7.   

    告诉楼主一个简单方法
    你将两个条件都故意写错,然后看那个地方先报错,就是先执行那个条件了。
    如where t1.aaa = t2.b and t1.aaaa=变量a
      

  8.   

    这绝不是个简单的问题,sql的优化有时和它有莫大的干系,赫赫,itpub的新书上老大们写的sql语句偶尔也是会犯这个错误的,需要把where字句的顺序换一下的.
      

  9.   

    准确的讲,好像sql92是从左到右的,但是从sql99开始,好像就变成从右到左了。