两表join时的on和where区别
表A join 表B----条件–on—> 临时表—where—> 结果表
on是作为临时表的筛选条件,where作为最终表的筛选条件
总结一:
1.where 是在两个表join完成后,再附上where条件;
2.and 则是在表连接前过滤A表或B表里面哪些记录符合连接条件,同时会兼顾是left join还是right join。即
假如是左连接的话,如果左边表的某条记录不符合连接条件,那么它不进行连接,但是仍然留在结果集中(此时右边部分的连接结果为NULL)。on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录;
3.建议尽量用where来过滤条件。
总结二:
(1)ON后面的筛选条件主要是针对的是关联表【而对于主表筛选条件不适用】;
(2)对于主表的筛选条件应放在where后面,不应该放在ON后面;
(3)对于关联表我们要区分对待:
如果是要条件查询后才连接应该把查询条件放置于ON后;
如果是想再连接完毕后才筛选就应把条件放置于where后面。
(4)对于关联表我们其实可以先做子查询再做join。