LEFT JOIN和IS NULL效果

时间:2012-09-20 00:48:15

标签: mysql sql left-join

http://dev.mysql.com/doc/refman/5.5/en/left-join-optimization.html,您可以阅读:

  

如果使用LEFT JOIN查找某些表中不存在的行   您有以下测试:在WHERE部分中col_name IS NULL,其中   col_name是一个声明为NOT NULL的列,MySQL停止   在它之后搜索更多行(对于特定的键组合)   找到了一行与LEFT JOIN条件相匹配的行。

任何机构都可以用人类可读的语言向我解释这是什么意思吗?或者用新手可读的语言;)

2 个答案:

答案 0 :(得分:2)

只返回右表上没有匹配的行。这可以说明为:

enter image description here

如您所见,有两个表正在加入。阴影部分是Table B上不存在的记录。

答案 1 :(得分:1)

左连接总是在右侧表中为左侧表中的每一行连接至少一行,即使右侧表中没有与连接条件匹配的行也是如此。如果发生这种情况,那么该行右侧表中的列都将为空。

这意味着在右侧表列中执行左连接然后测试null(在not null列中)是一种有效的习惯用法,用于测试连接表中没有相应行的行。 / p>

你引用的摘录是说MySQL在执行查询这个表单时足够聪明,一旦第一个表加入就停止从右表中加入更多行(因为这样做会浪费时间)这样做 - 你已经明确表示你正在寻找右表中没有匹配的行,所以找到一行至少找到一行的行将没有用处。)