现在有两种Sql:

  • Inner Join

    select * from Table1 a  
    Inner join Table2 b 
    On a.index = b.index 
    
  • Where

    select * from Table1 a,Table2 b
    where a.index = b.index
    

    这两种SQL有什么区别,除了语法上的区别,结果上看也看不出区别来。其实这两种SQL的作用是一样的。我们先将这两个sql放到MySql上看看结果:

    Explain select * from Table1 a  
    Inner join Table2 b 
    On a.index = b.index 
    
    
    -- 0 select statement
    -- 1 hash join (access("a"."index"="b"."index"))
    -- 2 table access full table1
    -- 3 table access full table2


   
    Explain select * from Table1 a,Table2 b
    where a.index = b.index 

    
    -- 0 select statement
    -- 1 hash join (access("a"."index"="b"."index"))
    -- 2 table access full table1
    -- 3 table access full table2

由此可见,这两种年语法的sql在MySql里面执行的步骤都是完全一样的。这两种语法的执行区别是由数据库的优化器来决定的,目前MySql 5.0以上对于这两种预发的执行是完全相同的。使用Where语法连接表是老式的语法,两者在表现上没有区别。

但是使用where来连接表是一种很不好的代码风格,当多个表来连接时,难以判断各个表之间的连接关系,微软在其SQL Server 2005之后就已经开始deprecated 这种语法。