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表数据也不会返回

你可能感兴趣的:(java,mysql,mysql,数据库)