SQL 执行顺序 及 全部关键字

发布时间:2026/6/8 15:14:30

SQL 执行顺序 及 全部关键字 SQL的逻辑执行顺序与书写顺序不同和完整关键字如下一、SQL逻辑执行顺序关键(8) SELECT (9) DISTINCT (10) TOP 列名/聚合函数 (1) FROM 表/子查询 (3) JOIN 表 ON 连接条件 (2) ON JOIN连接条件 (4) WHERE 行过滤条件 (5) GROUP BY 分组列 (6) WITH CUBE/ROLLUP (部分数据库) (7) HAVING 分组后过滤 (11) ORDER BY 排序列 (12) LIMIT/OFFSET/FETCH (MySQL: LIMIT, SQL Server: TOP/FETCH, Oracle: ROWNUM/FETCH)核心记忆FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT二、完整SQL关键字分类1.数据查询DQLSELECT,FROM,WHEREJOIN:INNER,LEFT,RIGHT,FULL,CROSSGROUP BY,HAVINGORDER BY,LIMIT,OFFSET,FETCHUNION,INTERSECT,EXCEPTDISTINCT,TOPINTO(SELECT INTO)2.数据操作DMLINSERT,UPDATE,DELETEMERGE(UPSERT)VALUES(配合INSERT)3.数据定义DDLCREATE,ALTER,DROPTRUNCATE,RENAMECOMMENT(添加注释)4.数据控制DCLGRANT,REVOKE,DENY5.事务控制TCLBEGIN/START TRANSACTIONCOMMIT,ROLLBACKSAVEPOINT,RELEASE6.其他常用关键字条件/逻辑:AND,OR,NOT,IN,BETWEEN,LIKE,IS NULL,EXISTS,CASE,WHEN,THEN,ELSE,END聚合:COUNT,SUM,AVG,MAX,MIN窗口函数:ROW_NUMBER(),RANK(),DENSE_RANK(),LAG(),LEAD(),OVER(),PARTITION BY集合操作:UNION,UNION ALL,INTERSECT,EXCEPT/MINUS子查询:ANY,ALL,SOME类型转换:CAST,CONVERT三、重点说明WHERE vs HAVINGWHERE: 分组前过滤行不能使用聚合函数HAVING: 分组后过滤组可以使用聚合函数执行顺序示例-- 看似复杂的SQL SELECT dept, AVG(salary) AS avg_salary FROM employees WHERE hire_date 2020-01-01 GROUP BY dept HAVING AVG(salary) 50000 ORDER BY avg_salary DESC LIMIT 5; -- 实际执行逻辑 -- 1. FROM employees -- 2. WHERE hire_date 2020-01-01 (先过滤行) -- 3. GROUP BY dept (再分组) -- 4. HAVING AVG(salary) 50000 (过滤分组) -- 5. SELECT dept, AVG(salary) (最后计算输出) -- 6. ORDER BY avg_salary DESC -- 7. LIMIT 5⚠️ 常见误区SELECT中的别名在WHERE中不可用逻辑上WHERE先执行ORDER BY中的别名可用最后执行窗口函数在WHERE/GROUP BY之后、ORDER BY之前执行不同数据库MySQL、PostgreSQL、SQL Server、Oracle在细节上略有差异但核心逻辑顺序一致。

相关新闻