当我们使用连接(JOIN)操作,关联两张或多张表来返回记录时,数据库都会生成一张临时表,最后将这张临时表返回给用户。
以 LEFT JOIN 为例:在使用 LEFT JOIN 时,ON 和 WHERE 过滤条件的区别如下:
ON 条件是在生成临时表时使用的条件,它不管 ON 中的条件是否为真,都会返回左边表中的记录;
WHERE 条件是在临时表已经生成后,对临时表进行的过滤条件。因为此时已经没有 LEFT JOIN 的含义(必须返回左侧表的记录)了,所以如果 WHERE 条件不为真的记录就会被过滤掉。
示例
有table1和table2两张表,数据和格式分别如下:
ON过滤条件
如上图检索出的结果,不管on条件是否为真,都会返回左边表中的记录;
WHERE过滤条件
如上图检索出的结果,在on条件检索出的临时表中,WHERE 条件会再次过滤,如果 WHERE 条件不为真的记录就会被过滤掉。