mysql关于left join关联查询时on和where条件区别
说明:
用left join关联查询时,数据库会先生成一张临时表,我们查询到的就是临时表的数据.
1. left join:以左表为基准,根据on条件过滤连接生成临时表,on后面的过滤条件对左表无效,都会返回左表中的数据,where是生成临时表之后,再对临时表进行过滤,跟left join没啥关系了,这里过滤的是临时表数据了.
2. right join:逻辑同上
3. full join:以左表为基准,根据on条件过滤连接生成临时表,on后面的过滤条件对左右表无效
4. inner join:等值连接,根据过滤条件生成临时表。on后面的条件可以用 where实现,on=where
总结
1.用left join 进行条件过滤时,on条件只会对右表进行条件过滤,不会对左表数据产生任何影响;
2.用left join 进行条件过滤时,where条件会对结果表进行条件过滤,所以会对左表数据产生影响;
3.用inner join 用on和where没有任何区别
举个简单例子:
SELECT * FROM A
LEFT JOIN B
ON A.id = B.id and B.is_deleted = 0
WHERE A.is_deleted = 0;
会返回所有A.is_deleted=0的数据
SELECT * FROM A
LEFT JOIN B
ON A.id = B.id
WHERE A.is_deleted = 0
and B.is_deleted = 0;
这里就不一定了,如果A.id=B.id的数据,但是B.is_deleted不等于0.那么该id的A表数据也不会返回