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

  返回结果:对匹配结果进行筛选

posted @ 2022-12-25 10:14  小log  阅读(1990)  评论(0编辑  收藏  举报