S
面向产品经理的交互式SQL教学
通过真实业务数据,练习产品分析 SQL。
SQL 课程 6:使用 JOIN 进行多表查询
真实业务信息通常分散在多张表中:商机表记录一笔销售机会,销售团队表记录人员归属,客户表保存行业与规模。JOIN 的作用是依据共同字段,把它们临时拼成一张适合分析的结果表。
普通 JOIN(也叫 INNER JOIN)只保留两张表都能匹配上的记录。它非常适合回答“每笔商机由谁跟进”“该客户属于哪个行业”这类需要跨表的信息问题。
按共同字段连接两张表
SELECT 字段 FROM 表A AS a JOIN 表B AS b ON a.共同字段 = b.共同字段;
把 ON 理解为两张表的“对接规则”
ON 后面必须写清楚哪两个字段代表同一件事。例如 sales_pipeline 和 sales_teams 都有 sales_agent;当两边的销售人员相同时,一笔商机就能匹配到其主管和区域办公室。
a、b、p、t 这类短写法叫表别名。它们不是必须的,但在多表查询里能让字段来源一目了然,也能避免两张表都有 account 时产生歧义。
为每笔商机补充销售团队信息
SELECT p.opportunity_id, p.sales_agent, t.manager FROM sales_pipeline AS p JOIN sales_teams AS t ON p.sales_agent = t.sales_agent;
INNER JOIN 会过滤什么?
只有 ON 条件匹配成功的行会被保留。如果产品目录中没有对应产品,或商机记录缺少客户名称,那条记录不会出现在 INNER JOIN 的结果里。这不是数据被删除,而是本次查询没有把它选出来。
下一课会学习外连接:当你想保留“没有匹配项”的记录来排查漏数或数据质量时,外连接更合适。
小提醒:先检查要连接的字段是否确实代表同一业务实体。名称相同但含义不同的字段,不能直接 JOIN。
练习
每题都需要写清 JOIN 的对象和 ON 条件;系统会核对全部匹配记录,而不是只检查示例行。
表格:sales_pipeline(商机)
显示第 0–0 行
第 1 / 1 页
正在准备浏览器内 SQL 数据库…