mysql中join后onwhere的区别
Posted ordinary
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql中join后onwhere的区别相关的知识,希望对你有一定的参考价值。
SELECT * FROM A;
SELECT * FROM B;
以上是两张表的机构
SELECT * FROM A LEFT JOIN B ON A.id=b.a_id ;
语句一 : SELECT * FROM A LEFT JOIN B ON A.id=b.a_id AND A.id <3;
语句二: SELECT * FROM A LEFT JOIN B ON A.id=b.a_id WHERE B.id <3;
两个语句查询出来的结果是有差异的
sql查询的关键字顺序为 from -> where -> group by-> having ->order by
left join 是在from范围的所以先on条件筛选,然后再做left join
而where是在left join的结果之后再次筛选
语句一(等价于SELECT *FROM A LEFT JOIN (SELECT * FROM B WHERE B.id < 3) b2 ON A.id = b2.a_id;)
- 按照on后的条件筛选B.id<3
- 1中查询出的结果与A left join
语句二
- 先left join
- 然后再根据where条件再次筛选
使用注意事项:
- ON后面的筛选条件主要是针对关联表的(对于主表的筛选条件不适用)
- 对于主表的筛选条件应该放在where后面,不应该放在ON后面
- 如果查询条件查询后才join连接应该把查询条件放在ON后面;如果要连接完毕后才筛选应该把条件放在where后面
- 对于关联表可以先做子查询再join
以上是关于mysql中join后onwhere的区别的主要内容,如果未能解决你的问题,请参考以下文章
Mysql中Left Join 与Right Join 与 Inner Join 与 Full Join的区别
mysql 里面JOIN 和 INNER JOIN 区别是啥