Skip to main content
本节介绍多表连接、聚合分析与进阶查询技巧(CTE、窗口函数、集合运算)。掌握这些内容可以灵活编写复杂报表与业务查询。

JOIN 类型速览

返回两张表匹配行,常用于获取具备关联记录的数据。
连接条件 (ON) 与过滤条件 (WHERE) 分开写能提升可读性,避免误把过滤逻辑放入 JOIN 造成结果差异。

多表连接示例

子查询与 EXISTS

EXISTS 通常在子查询返回大量行时更高效,优化器可在找到首行后提前终止。

公用表表达式(CTE)

递归 CTE(8.0+)

递归 CTE 常用于生成时间序列或处理树形结构。记得通过 SET cte_max_recursion_depth = 1000; 控制深度。

聚合与分组

  • GROUP BY 后可使用 HAVING 对聚合结果过滤
  • GROUPING SETSROLLUPCUBE 可生成多层级统计(MySQL 支持 ROLLUP

窗口函数(8.0+)

常见窗口函数:ROW_NUMBERRANKDENSE_RANKLAGLEADNTILESUM/AVG OVER。
窗口函数不会折叠行,适合在不改变行数的情况下追加分析字段。

集合运算

条件聚合与透视

这类写法常用于生成运营看板或 KPI 统计,可结合窗口函数实现同比环比计算。

性能提示

  • EXPLAIN 验证连接顺序与索引命中,必要时使用 STRAIGHT_JOIN 强制顺序
  • 避免在 JOIN 条件中对列进行函数转换
  • 对聚合查询可考虑建立覆盖索引或使用物化视图(手动维护)

小结

掌握连接、子查询、CTE 与窗口函数能显著提升查询表达力。下一步前往“事务与锁”,理解并发控制与一致性处理。