现在有两种Sql:
Inner Join
1
2
3select * from Table1 a
Inner join Table2 b
On a.index = b.indexWhere
1
2select * from Table1 a,Table2 b
where a.index = b.index这两种SQL有什么区别,除了语法上的区别,结果上看也看不出区别来。其实这两种SQL的作用是一样的。我们先将这两个sql放到MySql上看看结果:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20Explain 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 这种语法。