SQL 查询语句的子句的执行顺序
书写顺序: SELECT → FROM → WHERE → GROUP BY → HAVING → ORDER BY → LIMIT
执行顺序:
FROM + JOIN + ON
WHERE
GROUP BY
HAVING
SELECT
DISTINCT
ORDER BY
LIMIT
例子:
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组
-
FROM + JOIN + ON: 首先确定查询的数据源(表),并通过 JOIN 关联多个表,ON指定关联条件(先有数据来源,才能后续处理)。
-
WHERE: 对关联后的原始数据行进行过滤,移除不满足条件的行(此时还未分组,不能用聚合函数)
-
GROUP BY: 将 WHERE过滤后的行按指定列分组(相同值的行归为一组)。
-
HAVING: 对 GROUP BY 分组后的结果进行过滤,只保留满足条件的分组(可使用聚合函数,如 HAVING COUNT(*) > 10)。
-
SELECT: 从前面处理后的结果中,选择需要返回的列(或聚合函数结果),此时才确定最终输出的字段。
-
DISTINCT: 对 SELECT 后的结果去除重复行(如果使用了 DISTINCT)。
-
ORDER BY: 对 SELECT 后的结果按指定列排序(升序 / 降序)。
-
LIMIT: 最后限制返回的行数(如分页查询取前 10 行)。
