例如:一个二表连接的SQL,有两种写法:
(1)select A.c1,A.c2,B.c1,B.c2
from table1 A,table2 B
where A.id=B.id(2)select A.c1,A.c2,B.c1,B.c2
from table1 A join table2 B
on A.id=B.id哪种写法好呢?现在提倡用哪一种?
你喜欢用哪一种?我习惯用(1)
(1)select A.c1,A.c2,B.c1,B.c2
from table1 A,table2 B
where A.id=B.id(2)select A.c1,A.c2,B.c1,B.c2
from table1 A join table2 B
on A.id=B.id哪种写法好呢?现在提倡用哪一种?
你喜欢用哪一种?我习惯用(1)
在MSSQL2005中,两种写法生成的执行计划是一样。
第一种写法比较简单,第二种写法比较规范,如果没有特殊原因,建议使用第二种方法。因为第二种方法,MSSQL会进行语法检查,当要写一个内部联结如:select A.c1,A.c2,B.c1,B.c2 from table1 A join table2 B, MSSQL会报错,提醒你写上on的条件,而select A.c1,A.c2,B.c1,B.c2 from table1 A,table2 B则不会,此时MSSQL认为用户想得到一个交叉联结。
第一种是标准1394写法,mysql,sqlserver,oracle都可以正常运行
第二种只能在ms sql下运行
如果必要考虑风险这个因素,比如涉及到多种平台的迁移或者整合,你应该用第一种,起码在两个表的情况下他还是比较安全的。
但如果不知道具体原理的话,还是有可能出现问题,并且容易忽视。
比如
Book表
id,name,type_id
1,abc,1
2,bcd,null
Type表
type_id,type_name
1,TypeA
那么使用题目中说的两种写法,都会导致book表中的id=2的记录被漏掉。
原因就在inner join上,此时应该使用left outer join,从而保证book表的数据都可以取出来,无论type_id是否能与type表关联上。我习惯用显示声明关联的方式。
平时喜欢用第一种,主要是习惯了
第二种一般是在left join或right join 或 full join时才用
以后坚决用第二种
如果连接的表多了 join 比较清楚