首页 > 数据库 > SQL > 正文

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

舞夢輝影
发布: 2025-12-19 18:55:02
原创
679人浏览过
SQL执行顺序为FROM→WHERE→GROUP BY→HAVING→SELECT→ORDER BY→LIMIT,而非书写顺序;FROM先加载数据并连接,WHERE过滤行,GROUP BY分组聚合,HAVING过滤分组,SELECT计算输出列并去重,ORDER BY排序,LIMIT截取结果。

sql查询语句执行顺序详解_from到select完整流程说明【教程】

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())。这一步输出的是“组”而不是原始行。

FaceSwapper
FaceSwapper

FaceSwapper是一款AI在线换脸工具,可以让用户在照片和视频中无缝交换面孔。

FaceSwapper 960
查看详情 FaceSwapper
  • GROUP BY 后的列,或聚合函数内的列,才能出现在 SELECT 中(否则报错,如 MySQL 严格模式)
  • HAVING 在此阶段后立即执行,用于过滤分组结果(例如 HAVING COUNT(*) > 5),它能引用聚合函数,而 WHERE 不能
  • 没有 GROUP BY 时,整个结果集被视为一个组,聚合函数作用于全部数据

SELECT 与 DISTINCT:决定最终输出列

这是逻辑上倒数第二步:计算 SELECT 列表中的表达式(包括列名、别名、函数、运算等),并可选地去重(DISTINCT)。

  • 列别名在此处定义,并在后续步骤(如 ORDER BY)中可用;但 WHEREGROUP BY 中不可用
  • DISTINCT 是在所有 SELECT 表达式计算完成后,对整行结果去重,开销较大,应避免在大结果集上滥用
  • 窗口函数(如 ROW_NUMBER() OVER(...))也在此阶段计算,但它们不改变行数,只增加计算列

ORDER BY 与 LIMIT:排序与截取

最后两步:先按指定列或表达式排序(升序 ASC 或降序 DESC),再取前 N 行(LIMIT / TOP / FETCH FIRST,依数据库而异)。

  • ORDER BY 可以引用 SELECT 中的列别名、位置序号(如 ORDER BY 2 表示第二列),甚至未出现在 SELECT 中的列(只要它在 FROM 结果里存在)
  • LIMIT(或等效语法)必须放在最后,否则语法错误;它作用于已排序的结果,不是原始数据
  • 注意:无 ORDER BY 时,LIMIT 返回的行顺序是不确定的,不要依赖默认顺序

掌握这个执行顺序,你就知道为什么 WHERE 不能写聚合、为什么 ORDER BY 能用别名、为什么 LEFT JOINWHERE 条件可能变成交叉过滤。不复杂但容易忽略。

以上就是SQL查询语句执行顺序详解_FROM到SELECT完整流程说明【教程】的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号