关于表连接的ON与where的问题[sql server 2005]

感觉自己越来越乱了


在join的时候,

SQL code
A
[INNER,LEFT ,RIGHT]JOIN
ON 条件1
WHERE 条件2



我感觉混淆了,两个地方都可以放条件,那如何选择,将什么样的条件放在ON之后呢,还是WHERE之后

请大家教教菜鸟

作者: crafet   发布时间: 2011-06-15

on后面放的是连接条件啊 ,where后面放的是其他条件

作者: fredrickhu   发布时间: 2011-06-15

on 后面跟主外键关系条件,where后面跟具体条件。

作者: zy112429   发布时间: 2011-06-15

那如果把where的条件都放在ON之后,不用where
可以不

作者: crafet   发布时间: 2011-06-15

引用 3 楼 crafet 的回复:
那如果把where的条件都放在ON之后,不用where
可以不
可能会导致结果不同。

作者: zy112429   发布时间: 2011-06-15

哥们我给你解释下吧,一般来说结果不会有太大的区别。on 表示连接条件,where表示连接后的条件
但是同一个条件放在2个位置其实结果集是不一样的,我给你举例说明:
SQL code

select * from a left join b on a.id=b.id and b.name = 'abcd' 

select * from a left join b on a.id=b.id where  b.name = 'abcd' 




以上的2个结果集可能是不一样的

因为第一个b.name = 'abcd' 是连接条件,第二个是删选条件。第一个条件不满足的话但是对应的这条记录会返回在结果集里,只是b表的字段都是null,a全部显示。而第二个就直接排除这个记录了。
同样的其他几个连接楼主自己去思考吧

作者: yibey   发布时间: 2011-06-15

先执行on再执行 where

如果是 inne rjoin on 和 where 没有区别的  

如果是外联接 left outer ,right outer 就会有区别  
步骤是 先交叉联接 再执行 on筛选 再把外部行添加过来 再执行 where筛选

作者: aspwebchh   发布时间: 2011-06-15

两张表之间的关系写在ON

作者: tomscat   发布时间: 2011-06-15