这两个sql 语句效果是不是一样的,如果一样查询效率哪个更好?
语句1:
select * from (select * from 表1 a join 表2 b on a.no=b.no 
               join 表3 c on a.column1=c.column1) a
        join    
              (select * from 表2 a join 表4 b on                                               a.column2=b.column2)
             
语句2:                                                         
select * from 表1 a,表2 b,表3 c,表4 d
              where a.no=b.no
              and a.column1=c.column1
              and b.column2=d.column2

解决方案 »

  1.   

    第一种还没写完。遵循的标准不一样
    select * from t1 a
    inner join t2 b on a.no=b.no
    inner join t3 c on a.no=c.no
    inner join t4 d on b.no=d.no
      

  2.   

    这两种有什么区别?本来oracle没有第一种写法,是为了适应标准SQL才推出第一种,这是无区别的
      

  3.   

    xinyukc03() ( ) 信誉:100    Blog   加为好友  2007-6-10 22:03:56  得分: 0  
     
     
       
    学校里教的是第二种,系统生成的是第一种,好像第一种效率高。第一种,是标准的连接表查询。第二种,感觉像是先自然连接,再筛选,效率要低一些。关注中  
     第二种慢的原因在于四个表先做一个cross join,也就是笛卡尔积,两用where条件去匹配
      

  4.   

    jiazheng(飛天) ( ) 信誉:100    Blog   加为好友  2007-6-10 22:20:26  得分: 0  
     
     
       
    第一种还没写完。遵循的标准不一样
    select * from t1 a
    inner join t2 b on a.no=b.no
    inner join t3 c on a.no=c.no
    inner join t4 d on b.no=d.no  
     
    join默认就是inner join
      

  5.   

    penning(飞鱼) ( ) 信誉:100    Blog   加为好友  2007-6-11 17:40:03  得分: 0  
     
     
       
    这两种有什么区别?本来oracle没有第一种写法,是为了适应标准SQL才推出第一种,这是无区别的  
     
    本质上区别不大, 但从可移植性来说, 推荐第一种写法