SQL查询语句执行顺序详解_FROM到SELECT完整流程说明【教程】

admin 百科 11
SQL执行顺序为FROM→WHERE→GROUP BY→HAVING→SELECT→ORDER BY→LIMIT,而非书写顺序;FROM先加载数据并连接,WHERE过滤行,GROUP BY分组聚合,HAVING过滤分组,SELECT计算输出列并去重,ORDER BY排序,LIMIT截取结果。

SQL查询语句执行顺序详解_FROM到SELECT完整流程说明【教程】-第1张图片-佛山资讯网

SQL查询语句的执行顺序和书写顺序是两回事——你写的是 SELECT ... FROM ... WHERE ...,但数据库真正执行时,是从 FROM 开始,一步步筛选、计算、去重,最后才生成结果列。理解这个流程,能帮你写出更高效、更准确的SQL,也能快速定位“为什么查不到数据”或“为什么报错”。

FROM:先确定数据来源

执行的第一步是加载基础数据表(或视图、子查询),完成表连接(JOIN)。如果有多个表,数据库会按语法顺序或优化器策略决定连接方式(如嵌套循环、哈希连接)。此时还没过滤、没计算,只是把原始行组合起来。

  • 如果 FROM 后跟了子查询(如 (SELECT ...)),该子查询会先执行并生成临时结果集,再作为“表”参与后续步骤
  • ON 条件在 JOIN 过程中起作用,用于匹配左右表的行;它比 WHERE 更早生效,且对 LEFT JOIN 的右表空值保留至关重要
  • 别名(AS t1)在此阶段生效,后续所有步骤都只能用别名引用该表

WHERE:第一次行级过滤

FROMJOIN 产出的临时结果集上,应用 WHERE 条件进行筛选。这一步只保留满足条件的行,不满足的整行被丢弃。

  • WHERE 不能使用 SELECT 中定义的列别名(因为还没到 SELECT 阶段),也不能用聚合函数(如 COUNT()),除非配合 GROUP BY
  • 建议把高选择性条件(能大幅减少行数的)放在 WHERE 前面,有助于优化器制定更优执行计划
  • NULL 判断需用 IS NULLIS NOT NULL,不能用 = NULL

GROUP BY & 聚合计算:分组与汇总

WHERE 筛选后的结果按指定列分组,然后对每组计算聚合值(如 SUM()AVG()COUNT())。这一步输出的是“组”而不是原始行。

标签: mysql 聚合函数 为什么

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~