关于表连接的ON与where的问题[sql server 2005]
感觉自己越来越乱了
在join的时候,
SQL code
我感觉混淆了,两个地方都可以放条件,那如何选择,将什么样的条件放在ON之后呢,还是WHERE之后
请大家教教菜鸟
在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
可以不
可能会导致结果不同。
那如果把where的条件都放在ON之后,不用where
可以不
作者: zy112429 发布时间: 2011-06-15
哥们我给你解释下吧,一般来说结果不会有太大的区别。on 表示连接条件,where表示连接后的条件
但是同一个条件放在2个位置其实结果集是不一样的,我给你举例说明:
SQL code
以上的2个结果集可能是不一样的
因为第一个b.name = 'abcd' 是连接条件,第二个是删选条件。第一个条件不满足的话但是对应的这条记录会返回在结果集里,只是b表的字段都是null,a全部显示。而第二个就直接排除这个记录了。
同样的其他几个连接楼主自己去思考吧
但是同一个条件放在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筛选
如果是 inne rjoin on 和 where 没有区别的
如果是外联接 left outer ,right outer 就会有区别
步骤是 先交叉联接 再执行 on筛选 再把外部行添加过来 再执行 where筛选
作者: aspwebchh 发布时间: 2011-06-15
两张表之间的关系写在ON
作者: tomscat 发布时间: 2011-06-15