1.on
当left join语句中只有on时候,返回的结果是左表的所有记录,on只会影响(筛选)匹配的右表的结果
a表数据
b表数据
两个表之间通过班级id去关联起来的,语句1如下
select *from a left join b on a.classId=b.id;
语句1结果
语句2如下
select *from a left join b on a.classId=b.id and b.className='1班';
语句2结果
从两个示例来看,on是不会影响结果记录数,只会影响匹配(关联)的结果记录
2.on和where
当同时存在on和where时候,sql执行的操作是先on得到结果,再从结果中通过where去筛选这些结果
语句3
select *from a left join b on a.classId=b.id where b.className='1班';
语句3结果
这个语句3主要可以和语句2对比就很明显了,返回的结果少了两行记录,就是因为where的影响