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

#技术教程 发布时间: 2025-12-19
SQL执行顺序为FROM→WHERE→GROUP BY→HAVING→SELECT→ORDER BY→LIMIT,而非书写顺序;FROM先加载数据并连接,WHERE过滤行,GROUP BY分组聚合,HAVING过滤分组,SELECT计算输出列并去重,ORDER BY排序,LIMIT截取结果。

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

  • 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 条件可能变成交叉过滤。不复杂但容易忽略。




上一篇 : jQuery中DOM节点的删除方法总结(超全面)

下一篇 : oppo手机怎样卸载便签应用_oppo手机便签卸载步骤【方法】

推荐阅读

电话:400 76543 55
邮箱:915688610@qq.com
品牌营销
客服微信
搜索营销
公众号
©  丽景创新 版权所有 赣ICP备2024032158号 
宜昌市隼壹珍商贸有限公司 宜昌市隼壹珍商贸有限公司 宜昌市隼壹珍商贸有限公司 宜昌市隼壹珍商贸有限公司 宜昌市隼壹珍商贸有限公司 宜昌市隼壹珍商贸有限公司 宜昌市隼壹珍商贸有限公司 宜昌市隼壹珍商贸有限公司 宜昌市隼壹珍商贸有限公司 宜昌市隼壹珍商贸有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 恩施州毯滚百货有限公司 恩施州毯滚百货有限公司 襄阳市蜂欢商贸有限公司 襄阳市蜂欢商贸有限公司 恩施州换冯百货有限公司 恩施州换冯百货有限公司 恩施州健提百货有限公司 恩施州健提百货有限公司 西安益零商贸有限公司 西安益零商贸有限公司 南奥教育 南奥教育 南奥教育 南奥教育 南昌市南奥教育咨询有限公司 南昌市南奥教育咨询有限公司 南昌市南奥教育咨询有限公司 南昌市南奥教育咨询有限公司 南昌市南奥教育咨询有限公司 南昌市南奥教育咨询有限公司 南昌市南奥教育咨询有限公司 南昌市南奥教育咨询有限公司 南奥教育网 南奥教育网 南奥教育网 南奥教育网 南奥学习网 南奥学习网 南奥学习网 南奥学习网 南奥教育 南奥教育 南奥留学记 南奥留学记 南奥教育 南奥教育 南昌市南奥教育咨询有限公司 南昌市南奥教育咨询有限公司 南昌市南奥教育咨询有限公司 南昌市南奥教育咨询有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 广照天下广告 广照天下广告 广照天下广告策划 广照天下广告策划 广照天下 广照天下 广照天下 广照天下 广照天下 广照天下 广照天下广告策划 广照天下广告策划 广照天下广告策划 广照天下广告策划 南昌市广照天下广告策划有限公司 南昌市广照天下广告策划有限公司 南昌市广照天下广告策划有限公司 南昌市广照天下广告策划有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 九江市云仁商务咨询有限公司 九江市云仁商务咨询有限公司 九江市云仁商务咨询有限公司 九江市云仁商务咨询有限公司 九江市云仁商务咨询有限公司 九江市云仁商务咨询有限公司 九江市云仁商务咨询有限公司 九江市云仁商务咨询有限公司 九江市云仁商务咨询有限公司 九江市云仁商务咨询有限公司
品牌营销
专业SEO优化
添加左侧专家微信
获取产品详细报价方案