1. 简介
MySQL的left join是关联查询中比较常用的一种方式,可以将两张表中的数据按照一定的条件关联起来。在使用left join时,需要注意on和where条件的区别。
2. 基本用法
left join用来查询左边表(A表)中的记录,如果在右边表(B表)中有匹配的记录,则返回匹配的记录,否则返回null。
下面以两个表A和B为例,A表包含字段id和name,B表包含字段id和age。查询结果需要将A表和B表关联起来,按照id字段进行匹配,同时还需查询出A表的name字段和B表的age字段。
SELECT A.id, A.name, B.age
FROM A
LEFT JOIN B ON A.id=B.id;
解释:
首先从A表中选出所有记录,然后按照id字段匹配B表中的记录。如果在B表中存在匹配的记录,则返回匹配的记录,同时查询A表的name字段和B表的age字段。如果在B表中不存在匹配的记录,则返回null,同时查询A表的name字段和B.age字段。
3. on与where的区别
on和where在left join中的使用方式不同。on是在进行表关联时指定的搜索条件,而where是用来筛选关联后的结果集。
3.1. on条件
on条件用于指定表关联的条件,只有满足条件的记录才会被关联起来。
以A表和B表为例,需要按照id字段进行关联,并且只查询B表中age大于20的记录。
SELECT A.id, A.name, B.age
FROM A
LEFT JOIN B ON A.id=B.id AND B.age>20;
解释:
首先从A表中选出所有记录,然后按照id字段匹配B表中的记录,并且只返回B表中age大于20的记录。如果在B表中不存在匹配的记录,则返回null,同时查询A表的name字段和B.age字段。
3.2. where条件
where条件用于对关联后的结果集进行筛选,只有满足条件的记录才会被返回。
以A表和B表为例,需要按照id字段进行关联,并且只查询A表中id小于3的记录。
SELECT A.id, A.name, B.age
FROM A
LEFT JOIN B ON A.id=B.id
WHERE A.id<3;
解释:
首先从A表中选出所有id小于3的记录,然后按照id字段匹配B表中的记录。如果在B表中不存在匹配的记录,则返回null,同时查询A表的name字段和B.age字段。如果在B表中存在匹配的记录,则返回匹配的记录,同时查询A表的name字段和B表的age字段。
4. 总结
left join是一种常见的表关联方式,在使用时需要注意on和where条件的区别。on条件用于指定表关联的条件,where条件用于对结果集进行筛选。通过合理的使用left join和on条件以及where条件,可以实现多张表之间的复杂查询。