LEFT JOIN 保留左表全部记录,右表无匹配时字段为 NULL;其结果行数由左表决定,ON 条件用于关联,右表筛选须写在 ON 而非 WHERE,否则退化为 INNER JOIN。
LEFT JOIN 用于保留左表全部记录,右表只匹配符合条件的行;没匹配上的右表字段显示为 NULL。
LEFT JOIN 以左表(FROM 后面的表)为基准,逐行查找右表中满足 ON 条件的记录。只要左表某行存在,无论右表有没有匹配项,这行都会出现在结果里。右表没匹配到的部分,对应字段值为 NULL。
写法示例:
SELECT a.id, a.name, b.order_amount上面语句会列出所有用户,包括那些从未下过单的人(此时 order_amount 为 NULL)。
WHERE b.status = 'paid' 会过滤掉右表为 NULL 的行,实际丢掉左表无匹配的记录SUM(b.amount) 自动忽略 NULL,但 b.amount + 10 遇到 NULL 会得 NULL,可用 IFNULL(b.amount, 0) 处理假设 users 表有 5 行,orders 表有 3 行且只关联其中 2 个用户:
本质差异在于驱动表——LEFT JOIN 的结果行数由左表决定,不是由匹配数量决定。