left/right join 后加and条件和where条件区别在哪?
首先
- left/right join后面接的where是限制整个查询结果
- left/right a(左表) join b(右表) on a.uid=b.uid限制的是从表的查询结果(左外连接的从表是b,右外连接的从表是a),不影响主表的查询结果。
- 例如:
- select * from LeftTbale l left join RightTable r on l.uid=r.uid and l.uname like '%峰%' l.uname这边限制的条件无效等于后面l.uname like '%峰%' 写
- select * from LeftTbale l left join RightTable r on l.uid=r.uid and r.dname like '%开发%' r.dname like '%开发%' 限制条件有效,查询出r.dname中含有开发的记录
- select * from LeftTbale l left join RightTable r on l.uid=r.uid where l.uname like '%峰%' l.uname like '%峰%' 限制条件有效
后面补充简洁说明:
例如( left join...on..中on后面是作用生成临时表的限制条件,无论and中是否成立都会返回左表的全部记录,只对右表的条件会起限制作用)=》(临时表),where是在on条件限制后出现的临时表再做筛选过滤