MySQL中 left join on 后的 and 条件与 where 中条件的区别

说明:left join on 后的 and 条件中 主表的条件不生效,从表的条件生效,并且从表先进行筛选后数据量可能变少,更便于与主表关联,有利于提高查询效率。

建议:主表的筛选条件放在 where 中,从表的 筛选条件放在 on 后的 and 中。

  • on条件是在生成临时表时使用的条件,它不管and中的条件是否为真,都会返回左边表中的所有记录。 所以说 and后 加 左表的条件对
    左表无影响。and后的条件只对右表产生影响 (right join翻过来)
  • where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left
    join的含义(必须返回左表的记录)了,条件不为真的就全部过滤掉。即对 join后的数据再进行过滤,过滤出只符合where后的条件。
  • 在匹配阶段 where子句的条件都不会被使用。仅在匹配阶段完成以后,wehre子句条件才会被使用。它将从匹配阶段产生的数据中检索过滤

总结:

  1. 当条件加在 left(right) join on之后,则只会影响右(左)边数据,不会影响左(右)表数据,不管条件是否成立,左(右))边数据都能正常返回;

  2. inner join and 和 inner join where and 其查询结果基本一致;

  3. 当条件加在full on之后,则会根据and之后的条件分别影响左表或右表数据;

  4. 当条件加在where 之后则表示对关联结果再进行筛选,此时的结果将会依赖于where后边条件的真假

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