SQL 查询语句的子句的执行顺序

书写顺序: SELECT → FROM → WHERE → GROUP BY → HAVING → ORDER BY → LIMIT

执行顺序:

FROM + JOIN + ON

WHERE

GROUP BY

HAVING

SELECT

DISTINCT

ORDER BY

LIMIT

例子:

sql 复制代码
SELECT 
  category,  -- 步骤5:选择要返回的列
  AVG(price) AS avg_price 
FROM product  -- 步骤1:确定数据源
JOIN category c ON product.cid = c.id  -- 步骤1:关联表,指定条件
WHERE price > 50  -- 步骤2:过滤原始行(价格>50)
GROUP BY category  -- 步骤3:按类别分组
HAVING avg_price > 100  -- 步骤4:过滤分组(平均价格>100)
ORDER BY avg_price DESC  -- 步骤7:按平均价格降序
LIMIT 5;  -- 步骤8:只返回前5组
  1. FROM + JOIN + ON: 首先确定查询的数据源(表),并通过 JOIN 关联多个表,ON指定关联条件(先有数据来源,才能后续处理)。

  2. WHERE: 对关联后的原始数据行进行过滤,移除不满足条件的行(此时还未分组,不能用聚合函数)

  3. GROUP BY: 将 WHERE过滤后的行按指定列分组(相同值的行归为一组)。

  4. HAVING: 对 GROUP BY 分组后的结果进行过滤,只保留满足条件的分组(可使用聚合函数,如 HAVING COUNT(*) > 10)。

  5. SELECT: 从前面处理后的结果中,选择需要返回的列(或聚合函数结果),此时才确定最终输出的字段。

  6. DISTINCT: 对 SELECT 后的结果去除重复行(如果使用了 DISTINCT)。

  7. ORDER BY: 对 SELECT 后的结果按指定列排序(升序 / 降序)。

  8. LIMIT: 最后限制返回的行数(如分页查询取前 10 行)。

相关推荐
步十人5 小时前
【Redis】持久化机制
数据库·redis·缓存
Quincy_Freak5 小时前
银河麒麟aarch64如何高效做数据分析?分享一款内网离线数据分析利器
大数据·数据库·数据挖掘·数据分析·aarch64
香气袭人知骤暖5 小时前
PG数据库 Docker 容器自动备份方案
数据库·docker·容器
me8326 小时前
【Linux】Linux 目录命名规范溯源(Linux各个目录究竟是干嘛的)
linux·运维·数据库
土狗TuGou6 小时前
SQL内功笔记 · 第2篇:列的约束
数据库·笔记·sql
java_cj6 小时前
MySQL 执行原理深度剖析:查询成本计算与优化器内幕
数据库·后端·mysql
java_cj6 小时前
数据库范式化设计与性能优化全攻略
数据库·后端·性能优化·架构·开源
Noushiki7 小时前
MySQL索引优化实战:高效查询的黄金法则
数据库·sql·mysql
TDengine (老段)7 小时前
TDengine Commit 与 Flush 机制 — 从内存到磁盘的数据落盘全流程
大数据·数据库·物联网·架构·时序数据库·iot·tdengine
ID_180079054737 小时前
(淘宝 / 京东)商品评论 API 接口:技术实战案例与架构分析
服务器·数据库·架构