最全解释|Mysql 的join中on与where 过滤条件差异

一、inner join 

(1)正常情况下,内连接中on 和where,没有区别。

(2)如果使用where时没有完成所有连接,必须使用on

如下图,必须使用on。否则会报错。

where用于对前面的表操作(SELECT、UPDATE、DELETE)的限定,所以where需要在所有join连接完成后才能使用。


二、left join

(1)on是生成临时表时使用的条件

左连接时是以左表为基础的,左表的记录将会全部表示出来,而右表只会显示符合搜索条件即on后面的条件的记录。

即on对左表是不起作用的,只对右表起作用。

(2)where是对临时表的组合后的结果进行筛选,所以对左右表都是有作用的。


🌰例子1:

SELECT a.id, b.id FROM a  LEFT JOIN  b  ON a.id = b.id AND a.id =1 AND b.id = 1  

🌰例子2:

SELECT a.id, b.id FROM a LEFT JOIN b  ON a.id = b.id where a.id =1 AND b.id = 1 

🌰1和🌰2 就是明显的列子:其中语句1中的b.id是过滤b表的信息,a.id对a表过滤无效; 

语句2中b.id和a.id都生效,即where条件是在left on生效后即形成临时表后才产生的生效条件。

三、right join,与左连接类似。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容