← 返回《SQL 数据分析入门课:看懂业务数据》
📑 查看全课大纲(第 5 / 5 节)

JOIN 多表连接

JOIN 多表连接

在精心设计的关系型数据库中,为了避免数据冗余,数据往往分散在不同的表中。例如,小象咖啡馆的订单表 orders 只存储订单本身的数据(订单号、金额、顾客ID customer_id),而顾客的具体信息(姓名、注册手机)则存放在会员表 customers 中。如果我们要打印一份带有顾客姓名的“当日订单明细”,就需要使用 JOIN 将它们拼在一起。

两张表会通过一个“桥梁”字段(如 customer_id)相关联。我们使用 ON 来指定它们如何进行匹配:

SELECT ord.order_id, cust.name 
FROM orders AS ord
INNER JOIN customers AS cust 
ON ord.customer_id = cust.id;

📝 选择题

💡 侦探热身:理解连接桥梁条件 在上述查询中,ON ord.customer_id = cust.id 起到了什么关键作用?

  • A. 过滤并只保留消费金额大于 100 元的顾客记录
  • B. 作为拼接依据,确保每一笔订单能精准对应到该订单所属的会员档案
  • C. 从数据库中彻底删除那些没有绑定会员的游客订单

答案:B(作为拼接依据,确保每一笔订单能精准对应到该订单所属的会员档案)


在小象咖啡馆的分析场景中,我们最常用到以下两类连接:

  • INNER JOIN(内连接):只有当两张表中都有对应匹配的数据时,才会返回记录。例如:只展示绑定了会员身份的订单。
  • LEFT JOIN(左连接):即使右表中没有匹配的值,左表中的所有记录仍然会被保留下来,右表缺失的部分会自动填充为 NULL

✏️ 填空题

💡 侦探实战:揪出“零消费”静默会员 小象咖啡馆想做一次会员关怀,找出所有从未下过单的注册会员。我们需要以会员表 customers 为左表,左连接订单表 orders,即便对方无订单记录也能查出。请补全下方 SQL 代码:

# 会员表作为左表,左连接订单表
SELECT customers.name, orders.order_id 
FROM customers 
___ JOIN orders 
ON customers.id = orders.customer_id;

答案:LEFT

🎁 免费学习资源

领取《小象 11GB VIP 课件资料包与大厂真题手册》

包含全套实战 Jupyter 源码、清洗后数据集、大厂高频面试真题与专属学员答疑交流群。

  • 完整 Python / 数据分析 Jupyter 实战源码
  • 大厂真实业务数据集与练习题
  • 微信扫码添加课程顾问,免费获取网盘下载链接
微信二维码:扫码添加课程顾问微信扫码添加顾问