MySQL 的 left join 操作中,on 和 where 都可以放置条件,但二者有一定的区别。
on 语句是在连接两个表的时候使用的,用来指定连接的条件;where 语句则是在连接之后对结果进行筛选的过程中使用的,用来指定筛选条件。
具体来说,常见的使用场景是:两个表之间有一个公共字段关联,通过 left join 进行连接,right table 中有些记录的关联字段值为空(即没有匹配到 left table),此时想要查询出在 right table 中关联字段值为空的记录。
在这种情况下,可以使用以下 SQL 语句进行查询:
SELECT A.*, B.*
FROM table_a AS A
LEFT JOIN table_b AS B ON A.id = B.id
WHERE B.id IS NULL;
在该 SQL 语句中,第一个表是 table_a,第二个表是 table_b。由于我们想要查找关联字段为空的记录,所以我们使用 LEFT JOIN,将 table_a 作为左表,table_b 作为右表。
B.id IS NULL 是该 SQL 语句的关键部分,表示查找在右表中没有匹配到左表的记录(即 B.id 为空)。将条件放在 where 中会筛选掉所有没有匹配到的记录,而在 on 中进行判断则可以将数据连接后再对空值进行筛选。
再举一个例子来说明,假设有一张表格 BlogPosts,还有一张表格 PostTags,它们之间通过 BlogPosts.Id 和 PostTags.BlogPostId 相关联。现在我们想要查找所有没有标签的博客,可以使用以下 SQL 语句:
SELECT *
FROM BlogPosts
LEFT JOIN PostTags ON BlogPosts.Id = PostTags.BlogPostId
WHERE PostTags.BlogPostId IS NULL;
在该 SQL 语句中,使用了 left join 连接两个表,然后在 where 中将条件设置为 PostTags.BlogPostId IS NULL,代表没有对应的标签。如果将该条件放在 on 中,则会将所有没有匹配到左表的记录放在结果集中,无法实现我们需要的筛选。
综上所述,在 left join 操作中,on 和 where 都是起到条件筛选的作用,但位置不同,作用也不同。on 操作在连接两个表的关系时使用,用于作为连接条件;where 操作在连接两个表之后,在筛选结果集时使用,用于过滤出符合条件的记录。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MySQL left join操作中on和where放置条件的区别介绍 - Python技术站