账暴 发表于 2025-5-30 14:00:14

MySQL 查询语句的执行顺序

​整理了下MySQL查询语句的执行顺序。
(1) FROM
(2) ON
(3) JOIN
(4) WHERE
(5) GROUP BY
(6) WITH (CUBE|ROLLUP)
(7) HAVING
(8) SELECT
(9) DISTINCT
(10) ORDER BY
(11) LIMIT(1) FROM 子句 - 首先执行

FROM employees e

[*]MySQL 会先读取 FROM 子句中的表信息
(2) ON 条件 - 连接条件过滤

JOIN departments d ON e.dept_id = d.id

[*]对连接表的行进行匹配
[*]只有满足 ON 条件的行才会被保留
(3) JOIN 操作 - 执行表连接


[*]MySQL 支持多种连接方式:INNER JOIN、LEFT/RIGHT JOIN、CROSS JOIN
(4) WHERE 条件 - 行级过滤

WHERE e.salary > 5000 AND d.location = 'NY'

[*]此时不能使用 SELECT 中的别名
[*]不能使用聚合函数(如 COUNT, SUM 等)
(5) GROUP BY - 分组操作

GROUP BY d.name, e.position

[*]可以 GROUP BY 不在 SELECT 中的列
[*]分组后每组生成一行结果
(6) WITH CUBE/ROLLUP - 生成超组

GROUP BY d.name WITH ROLLUP

[*]生成小计和总计行
(7) HAVING - 分组后过滤

HAVING AVG(e.salary) > 6000

[*]可以使用聚合函数
[*]可以使用 SELECT 中的别名
(8) SELECT - 选择输出列

SELECT d.name, AVG(e.salary) as avg_sal

[*]计算表达式和函数调用
[*]定义列别名
(9) DISTINCT - 去重操作

SELECT DISTINCT department

[*]MySQL 可能在 GROUP BY 时就已经去重
(10) ORDER BY - 结果排序

ORDER BY avg_sal DESC

[*]可以使用 SELECT 中定义的别名
[*]对最终结果集排序,性能消耗较大
(11) LIMIT - 结果限制

LIMIT 10 OFFSET 5

[*]MySQL 特有语法,其他数据库可能用不同方式
[*]限制返回的行数
恐惧不是真实的,它只是对未来的一种自我暗示,是我们心灵的产物。-- 烟沙九洲
 ◀
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

百里宵月 发表于 2025-12-12 05:00:42

这个有用。

粒浊 发表于 2026-1-13 22:22:15

分享、互助 让互联网精神温暖你我

劳欣笑 发表于 2026-1-16 19:59:50

过来提前占个楼

丘奕奕 发表于 2026-1-17 19:08:18

谢谢分享,辛苦了

炀餮氢 发表于 2026-1-19 01:38:26

懂技术并乐意极积无私分享的人越来越少。珍惜

仇华乐 发表于 2026-1-20 00:51:35

懂技术并乐意极积无私分享的人越来越少。珍惜

靳谷雪 发表于 2026-1-21 16:10:30

懂技术并乐意极积无私分享的人越来越少。珍惜

粒浊 发表于 2026-1-22 22:12:44

这个好,看起来很实用

撙仿 发表于 2026-1-23 17:34:55

分享、互助 让互联网精神温暖你我

坏级尹 发表于 2026-2-2 02:59:53

这个有用。

粒浊 发表于 2026-2-4 03:30:28

感谢分享,下载保存了,貌似很强大

骆贵 发表于 2026-2-4 08:36:01

谢谢分享,试用一下

户烫擞 发表于 2026-2-5 17:35:46

懂技术并乐意极积无私分享的人越来越少。珍惜

飧沾 发表于 2026-2-6 06:03:06

感谢,下载保存了

舒娅友 发表于 2026-2-7 09:56:28

不错,里面软件多更新就更好了

支智敏 发表于 2026-2-8 03:11:46

感谢发布原创作品,程序园因你更精彩

句惫 发表于 2026-2-10 05:16:04

感谢分享,下载保存了,貌似很强大

当贵 发表于 2026-2-10 10:12:43

谢谢楼主提供!

鞍注塔 发表于 2026-2-10 21:50:31

谢谢分享,辛苦了
页: [1] 2
查看完整版本: MySQL 查询语句的执行顺序