核心:on 后面and 是匹配条件,where是对匹配数据后进行筛选
创建2张表。员工表关联部门表
表字段:
表数据(只有开发部有员工数据):
接下来演示:
第1个SQL ON t1.deptId = t2.id AND t1.`name` = '张三' AND t2.`name` = '开发部'; 作为匹配条件(员工名称是‘张三’,在‘开发部’)所以张三匹配到,李四和赵六也返回是因为left join on 都会返回左边的数据,
第2个SQL ON t1.deptId = t2.id AND t1.`name` = '张三' ; 作为匹配条件,
1和2两个sql查询的数据是一样的。(1和2两个SQL证明了on 后面and只做匹配条件,右表匹配到数据就显示,匹配不到就显示null,但左表的数据一直都会返回)
第3个SQL,先匹配了ON t1.id = t2.deptId ,然后再对匹配后的数据做筛选,所以只有一条数据。
总结:
1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录,副表不符合的记录用null补充了
2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉
有问题的欢迎大家批评指正,谢谢你的阅读。