SQL的select语句完整的执行顺序
- 其他
- 2025-09-17 09:30:01

SQL的SELECT语句的执行顺序可以用"做菜流程"来类比理解。虽然我们写SQL时按SELECT…FROM…WHERE…顺序写,但数据库执行顺序完全不同。以下是通俗易懂的讲解(附流程图和示例):
🔧 执行顺序流程图: FROM → JOIN → WHERE → GROUP BY → HAVING → SELECT → DISTINCT → ORDER BY → LIMIT/OFFSET
🍳 做菜版类比: 假设你要做一盘"宫保鸡丁" 1. 准备食材(FROM+JOIN) → 2. 筛选新鲜食材(WHERE) 3. 按类别分组(GROUP BY)→ 4. 检查调料是否达标(HAVING) 5. 选择需要的配菜(SELECT)→ 6. 去掉重复的(DISTINCT) 7. 摆盘顺序(ORDER BY)→ 8. 最终装盘量(LIMIT)
📝 分步详解(以查询为例):
SELECT department, COUNT(*) as emp_count FROM employees WHERE salary > 5000 GROUP BY department HAVING COUNT(*) > 3 ORDER BY emp_count DESC LIMIT 2;1️⃣ FROM + JOIN(先确定数据源)
-- 第一步:先读取employees表的所有数据 FROM employees2️⃣ WHERE(筛选行)
-- 第二步:过滤出工资>5000的记录 WHERE salary > 5000 -- 注意:这里还不能使用SELECT中的别名emp_count!3️⃣ GROUP BY(分组)
-- 第三步:按部门分组 GROUP BY department -- 现在数据被分成若干组,比如:[HR组, IT组, Finance组...]4️⃣ HAVING(筛选分组)
-- 第四步:只保留员工数>3的部门 HAVING COUNT(*) > 3 -- 这里可以用聚合函数,但WHERE不行5️⃣ SELECT(选择列)
-- 第五步:选出部门名称和统计数 SELECT department, COUNT(*) as emp_count -- 此时才生成emp_count这个别名6️⃣ DISTINCT(去重)
-- 如果有DISTINCT,此时执行去重操作 -- 本例没有使用7️⃣ ORDER BY(排序)
-- 第六步:按统计数降序排列 ORDER BY emp_count DESC -- 这里可以使用SELECT阶段生成的别名!8️⃣ LIMIT/OFFSET(最终限制)
-- 第七步:只取前2条结果 LIMIT 2💡 关键记忆点:
WHERE vs HAVING:WHERE过滤行,HAVING过滤分组别名使用顺序:ORDER BY可以使用SELECT的别名,WHERE不行聚合函数位置:HAVING可用聚合函数,WHERE不可用执行顺序与书写顺序不同:FROM永远最先执行📊 最终结果示例: 假设原始数据:
部门工资HR6000HR5500IT7000IT7200IT6800Finance8000经过各步骤处理后会得到:
departmentemp_countIT3HR2但因为HAVING COUNT(*)>3和LIMIT 2,最终只显示IT部门(假设IT组实际有超过3人)
记住这个流程,面试时可以用"做菜步骤"来形象描述,保证面试官印象深刻!
SQL的select语句完整的执行顺序由讯客互联其他栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“SQL的select语句完整的执行顺序”
上一篇
128陷阱
下一篇
鸿蒙通过用户首选项实现数据持久化