MySql 连接查询中 on 和 where 的区别
在日常业务工作中,经常会遇到两表连接查询的需求,在使用两表连接时,会用到on或where,这两者有一定的区别;
1. 区别如下:
1、on 是关联条件,而where 是查询条件;
2、on是先对表进行筛选再生成关联表,where是先生成关联表再对关联表进行筛选,on执行的优先级高于left join,而where的优先级低于left join
3、使用on关键字时,会先根据on后面的条件进行筛选,条件为真时返回该行,由于on的优先级高于left join,所以left join关键字会把左表中没有匹配的所有行也都返回,然后生成临时表返回
where对与行的筛选是在left join之后的,也就是生成临时表之后才会对临时表进行筛选
2. 验证示例:
- on 查询:
SELECT * FROM
course c
LEFT JOIN
teacher t
ON c.t_id = t.t_id AND c.c_id <3
返回结果:可以看到英语、化学不满足条件,直接返回
- where查询:
SELECT * FROM
course c
LEFT JOIN
teacher t
ON c.t_id = t.t_id
where c.c_id <3
返回结果:对匹配结果进行筛选