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 行。

显示第 00
1 / 1
正在准备浏览器内 SQL 数据库…