mysql left join on vs where筛选差异详解

1 下载量 25 浏览量 更新于2024-08-31 收藏 54KB PDF 举报
本文将深入解析MySQL左连接(LEFT JOIN)和右连接(RIGHT JOIN)在使用ON与WHERE关键字进行筛选时的区别。通常,当我们使用JOIN操作连接两个或更多表时,ON和WHERE都用于指定连接条件,但它们的作用时机和查询逻辑有所不同。 在SQL查询中,ON关键字用于定义JOIN操作的连接条件,它是在执行JOIN操作之前确定哪些行应该被匹配。在LEFT JOIN和RIGHT JOIN中,ON语句确保左表(默认是左表)的所有记录都会被包含在结果集中,即使在右表中没有匹配的记录。如果在ON中设置了筛选条件,如`A.ID = B.ID and B.ID < 3`,这意味着只有当B表中的ID小于3时,才会将A表的行与B表的行关联起来。 相比之下,WHERE关键字是在JOIN操作完成之后对结果集进行过滤的。当你在LEFT JOIN的WHERE子句中使用条件,如`WHERE B.ID < 3`,这实际上是在已经进行了LEFT JOIN的基础上,进一步筛选剩余的行,可能会排除掉部分原本匹配的行,因为JOIN操作已经基于ON条件进行了初步的筛选。 回到提供的例子,语句一: ```sql SELECT A.ID as AID, B.ID as BID FROM A LEFT JOIN B ON A.ID = B.ID WHERE B.ID < 3 ``` 这个查询首先执行LEFT JOIN,将所有A表的记录与B表中ID小于3的记录匹配,然后应用WHERE子句进一步过滤B表的结果。 而语句二: ```sql SELECT A.ID as AID, B.ID as BID FROM A LEFT JOIN B ON A.ID = B.ID AND B.ID < 3 ``` 这里,AND运算符放在了ON子句中,这意味着筛选条件`B.ID < 3`成为连接条件的一部分,这实际上改变了JOIN操作的方式,可能导致某些在满足B表ID小于3的情况下,因A表没有对应ID而无法连接的行被排除在结果之外。 因此,尽管表面上看起来两个查询可能相似,但由于WHERE和ON的位置不同,它们的实际效果和返回结果是有区别的。在实际使用时,理解并正确运用ON和WHERE的关键字对于确保得到预期结果至关重要。