一、书写顺序(开发者编写顺序)

  1. SELECT:指定要返回的列或表达式

  2. FROM:指定查询的基础表

  3. JOIN:连接其他表(INNER JOIN/LEFT JOIN/RIGHT JOIN等)

  4. WHERE:行级过滤条件

  5. GROUP BY:分组聚合的依据

  6. HAVING:组级过滤条件

  7. ORDER BY:结果排序规则

  8. LIMIT/OFFSET:限制返回行数(可选)

二、执行顺序(数据库引擎处理顺序)

  1. FROM:加载基础表数据

  2. JOIN:执行表连接操作(关键区别:JOIN在FROM之后立即执行)

  3. WHERE:过滤不符合条件的行

  4. GROUP BY:对数据进行分组

  5. HAVING:过滤不符合条件的组

  6. SELECT:投影选择需要的列

  7. ORDER BY:对结果集排序

  8. LIMIT/OFFSET:截取返回结果

三、JOIN子句的关键作用

  • 执行时机:在FROM之后、WHERE之前,决定了哪些行参与后续过滤

  • 数据影响:不同JOIN类型会影响最终参与计算的行数

    • INNER JOIN:仅保留匹配的行

    • LEFT JOIN:保留左表所有行,右表无匹配则补NULL

四、对比示意图

五、常见误区提醒

  • ❌ 认为SELECT是最先执行的子句

  • ❌ 在WHERE中使用聚合函数(应使用HAVING)

  • ❌ 忽略JOIN顺序对查询性能的影响