SQL 的执行顺序

作者: 分类: mysql 时间: 2026-05-23 评论: 暂无评论

原始表

FROM (获取数据源)

ON (筛选连接前的行)

JOIN (生成连接表)

WHERE (过滤行)

GROUP BY (分组)

HAVING (过滤分组)

SELECT (计算列、聚合、别名)

DISTINCT (去重)

ORDER BY (排序)

LIMIT (限制行数)

最终结果

FROM – 确定数据源表

ON – 筛选连接前的行(对 JOIN 而言)

JOIN – 执行连接操作,生成虚拟表

WHERE – 对连接后的行进行过滤

GROUP BY – 将行分组

HAVING – 对分组后的结果进行过滤

SELECT – 选择列、计算表达式、聚合函数

DISTINCT – 去除重复行

ORDER BY – 排序

LIMIT / OFFSET – 限制返回行数

注意:ON 只对 JOIN 有效,WHERE 则在连接完成后整体过滤。SELECT 中的列别名通常无法在 WHERE / GROUP BY / HAVING 中使用,因为它们在 SELECT 之后才生成。

WHERE和ON区别:ON 的过滤发生在连接前,而 WHERE 发生在连接后。

WHERE 和 HAVING 的区别:
WHERE 过滤行,在分组前;HAVING 过滤分组,在 GROUP BY 后,可使用聚合函数。

标签: none

订阅本站(RSS)