sql执行顺序

复制代码
SELECT DISTINCT
FROM
JOIN
WHERE
GROUP BY
HAVING
ORDER BY
LIMIT/OFFSET

实际执行顺序

顺序 关键字 说明
1 FROM 加载左表数据
2 JOIN 连接右表,生成笛卡尔积/匹配行
3 ON 筛选连接条件(JOIN 的过滤)
4 WHERE 逐行过滤数据(不能使用聚合函数)
5 GROUP BY 分组聚合
6 HAVING 过滤分组后的数据(可以使用聚合函数)
7 SELECT 选择列、计算表达式、去重
8 DISTINCT 去重
9 ORDER BY 排序
10 LIMIT/OFFSET 限制返回行数

关键理解示例

复制代码
SELECT 
    dept_id,
    AVG(salary) as avg_salary
FROM employees e
JOIN departments d ON e.dept_id = d.id
WHERE e.status = 'active'      -- 第4步执行,过滤原始行
GROUP BY dept_id                -- 第5步执行
HAVING AVG(salary) > 50000      -- 第6步执行,过滤分组
ORDER BY avg_salary DESC        -- 第9步执行
LIMIT 10;      -- 第10步执行

注意事项

  1. WHERE 不能使用聚合函数(如 SUM(), AVG()),要用 HAVING

  2. 别名 在 SELECT 阶段才生成,所以 WHERE 中不能用别名,ORDER BY 中可以

  3. 执行顺序是逻辑顺序,数据库优化器可能会重排以提高性能,但结果等价

相关推荐
本地化文档1 小时前
psycopg3-docs-l10n
数据库·python·postgresql·github·gitcode·sphinx
Safeploy安策数据1 小时前
从算法到架构:构建企业级数据库加密与密钥防护体系的实战手册
数据库·安全·架构
Litluecat2 小时前
信创改造,Oracle切海量数据库,语法与类型坑
数据库·sql·oracle·信创·字段类型·海量
星越华夏2 小时前
MongoDB安装实战指南
数据库·mongodb
川石课堂软件测试2 小时前
性能测试|JMeter常用线程组设置策略
大数据·数据库·功能测试·测试工具·jmeter·mysql·单元测试
cheems95272 小时前
[Redis] redis常见命令和String字符串解析
数据库·redis·缓存
Database_Cool_2 小时前
企业级多模态分析计算引擎选型:阿里云 AnalyticDB MySQL 统一分析平台方案
数据库·mysql·阿里云
阿演2 小时前
我把这个桌面数据库工具又升级了一轮:现在支持 ClickHouse,还能可视化建表和改表了
数据库·clickhouse·ai编程·数据库连接工具
J.Kuchiki2 小时前
【PostgreSQL内核学习 —— 外部排序生成与归并】
数据库·学习·postgresql