mysql 在ON后面接条件和条件全部放在where后面有什么区别,请看示例

图片说明

请问这两条SQL在查询表达的意思上有什么区别?

有区别,查询的结果不同,left join左连接会将两个表组装起来,安照on的查询来组装,然后再where进行条件查询;如果第二张表存在与第一张关联的又会被on查询过滤的,那么第一种查询有可能会查到左表连接空的情况,而第二种会去掉这种结果,所以两者查询不一样的
例如 表1:1 a 2 b 3 c 表2 a A b B
如果on里查询B的,第一种结果为 1 a null 2 b B 3 c null
where查询B的,第二种的结果为2 b B

执行的动作不一样。
on后接条件,先将两张表根据关联为同一张表,然后根据条件查询。
将条件放到where里,是将两张表直接关联,**所得的关联数据特别大**,然后根据条件查询。
影响的应该是查询速度。

你这种写法不对,on一般是进行两张表关联是用的条件,在操作数据量大的表的时候效率会直线下降,更何况还是多个条件,所以正确用法是如果有具体条件搜索,需要再where后面加,不然定义一个where语法还有什么意义呢

left join,首先会显示左表的全部内容,on只会根据条件限制右表的显示内容。where对结果进行过滤。

效率会有差异,放在on内效率要高一些

第一个是先对join的表进行数据筛选过后再关联,第二个是先关联了在对两张表关联在一起的数据进行筛选。

on是基于某个条件,让AB表,也就是你的lp表做连表。而且你写的是左连接,表示以A表为主,根据on后面的判定条件把B表接上做一张大表。
你后面的where语句是跟普通的查询筛选条件一样,指返回出满足where条件的所有数据,lp表示你前面定义的表,点后的是列名,所在列的值满足要求的都会被查出并返回。

on是连接的条件,where是查询的条件,

on 只筛选关联表,对主表不起作用。where是对整个连接表筛选。

查询的结果不同,第一种左连接可能出现空表,第二种没有