S
面向产品经理的交互式SQL教学
通过真实业务数据,练习产品分析 SQL。
SQL 课程 7:外连接
INNER JOIN 只保留能匹配的记录,但分析中常常更关心“没有匹配上的那部分”:哪些销售人员还没有商机?哪些商机的产品没有出现在产品目录里?这正是外连接的用武之地。
LEFT JOIN 会完整保留左边表的记录;右边表找不到匹配时,右侧字段会显示为 NULL。换句话说,外连接既可以补齐名单,也能暴露数据缺口。
保留左表的所有记录
SELECT 字段 FROM 左表 AS a LEFT JOIN 右表 AS b ON a.共同字段 = b.共同字段;
“左”到底指谁?
LEFT JOIN 中,写在 FROM 后面的表就是左表,它的记录会被全部保留。比如从 sales_teams 出发连接商机表,就能看到每一位销售人员;没有商机的人员在 opportunity_id 列显示 NULL。
如果把两张表的位置交换,保留的对象也会交换。写外连接前,先问自己:我最不想丢掉的是哪份名单?把它放在左边。
保留所有销售人员,即使暂时没有商机
SELECT t.sales_agent, p.opportunity_id FROM sales_teams AS t LEFT JOIN sales_pipeline AS p ON t.sales_agent = p.sales_agent;
外连接也是数据质量检查工具
本地数据中,商机表出现了 GTXPro,而产品目录记录的是 GTX Pro。两者看起来很像,但字符串并不完全相同,INNER JOIN 会直接丢掉这些记录;LEFT JOIN 加上“右表字段为 NULL”的条件,则能把问题找出来。
小提醒:NULL 不等于空字符串,也不等于 0。判断缺失值要使用 IS NULL,下一课会专门讲它。
练习
外连接的重点不是多写一个 LEFT,而是先确定必须保留哪张表的全部记录。
表格:sales_teams(销售团队)
显示第 0–0 行
第 1 / 1 页
正在准备浏览器内 SQL 数据库…