inner join仅保留两表匹配的行,left join保留左表全部行且右表无匹配时填充null;前者结果行数≤任一单表,后者行数=左表行数;inner join适用于查共有数据,left join适用于查主表全量+可选关联数据。

INNER JOIN 只保留两张表都匹配的行,LEFT JOIN 保留左表全部行,右表不匹配的部分用 NULL 填充。
匹配逻辑不同
INNER JOIN 要求左右两表的连接字段值必须同时存在且相等,才会出现在结果中;只要某行在右表找不到对应记录,哪怕左表有数据,也会被直接过滤掉。
LEFT JOIN 以左表为基准,左表每一行都会出现在结果里。若右表无匹配项,对应列全为 NULL。
结果行数差异明显
- INNER JOIN 行数 ≤ 左表行数,也 ≤ 右表行数,通常少于任一单表
- LEFT JOIN 行数 = 左表行数(可能因左表某行在右表有多条匹配而增多)
适用场景有侧重
查“共有的数据”,比如“哪些客户下过订单”,用 INNER JOIN 更精准;
查“完整的主表信息 + 可选的关联数据”,比如“所有客户及其订单金额(没有订单的显示为 NULL)”,必须用 LEFT JOIN。
NULL 值是关键识别标志
LEFT JOIN 结果中右表字段出现 NULL,说明该行在右表无匹配;
INNER JOIN 结果中不会出现 NULL(除非原字段本身存了 NULL)。
理解连接类型,本质是明确“以哪张表为主、要不要保留不匹配的记录”。选错 JOIN 类型,轻则漏数据,重则业务逻辑出错。










