两张表:
emp
dept
首先看两个例子
1.SELECT * FROM emp LEFT JOIN dept ON emp.deptno=dept.deptno WHERE emp.deptno=2
将where换成and
2.SELECT * FROM emp LEFT JOIN dept ON emp.deptno=dept.deptno AND emp.deptno=2
3.SELECT * FROM emp LEFT JOIN dept ON emp.deptno=dept.deptno AND emp.deptno=1
分析:首先第一个sql,两张表的联查,可以看出使用的是左连接的查询方式,左连接查询左边的表全部保留,右边的表只保留匹配的内容,不匹配的内容用null填充也就是说emp.deptno全部存在(包含1和2),然后关联查询的结果使用where条件中的emp.deptno=2将不是emp.deptno不是2的全部过滤掉
也就是说,可以理解where是将查询出来的结果过滤掉
第2,3相比可以看出,左连接查询左边的内容emp中的数据时全部展示的,但是这时候on的条件中使用and表示并且emp.deptno为2时,dept只会匹配emp.deptno中为2的内容,其他都为null填充,and的表示emp.deptno为1时,dept只会匹配emp.deptno为1的内容,其余都为null填充
可以得知,on条件中使用and连接在查询结果出来之前就开始过滤掉表格中dept不相符合的内容了