多表串联查询要点
- 多表 JOIN 就是多个 INNER JOIN 依次叠加,前一个结果当左表
- 链条顺序不影响最终结果,但影响中间临时集大小
- 大表尽量放在连接链靠后、能被前面过滤缩小的位置
- 每个 ON 只描述相邻两张表的关联键,别跨级写条件
- 连完再 GROUP BY 做跨表聚合(如每用户消费总额)
- 表多时别名统一用首字母,避免列归属混乱
多表串联查询示例
-- 串起 用户 / 订单 / 订单明细 / 商品
SELECT u.user_name, o.order_id, p.product_name, oi.qty
FROM user u
INNER JOIN orders o ON u.user_id = o.user_id
INNER JOIN order_item oi ON o.order_id = oi.order_id
INNER JOIN product p ON oi.product_id = p.product_id;
-- 统计每个用户买过几种商品
SELECT u.user_name, COUNT(DISTINCT p.product_id) AS kind_cnt
FROM user u
INNER JOIN orders o ON u.user_id = o.user_id
INNER JOIN order_item oi ON o.order_id = oi.order_id
INNER JOIN product p ON oi.product_id = p.product_id
GROUP BY u.user_name;
避坑提醒:多表 JOIN 前先用 WHERE 把大表范围缩到最小,能显著减少中间结果,速度差好几倍。