SQL的执行顺序

  1. FROM 子句

    • 首先处理 FROM 子句,确定要查询的表。
  2. JOIN

    • 如果有 JOIN 存在,接下来处理 JOIN 操作,包括 ON 和 USING 条件,进行表的联结。
  3. WHERE 子句

    • 接着,数据库会根据 WHERE 子句过滤掉不符合条件的行。
    • 这个步骤在 JOIN 之后进行,因此在 JOIN 后产生的结果集上应用过滤条件。
  4. GROUP BY 子句

    • 然后,对 WHERE 子句过滤后的结果应用 GROUP BY 子句,将结果集分组。
    • 这对于聚合函数(如 COUNT, AVG, MIN, MAX, SUM)是必需的。
  5. SELECT子句

    • SELECT 子句中指定的列和表达式被处理,选择出需要的数据。
    • 在这个阶段,聚合函数也会被计算。
  6. HAVING子句

    • HAVING 子句对 GROUP BY 的结果进行再次过滤,这一步是在分组后对组应用条件,通常与聚合函数一起使用。
    • 注意HAVING 子句可以使用 SELECT 子句中定义的字段或别名
  7. DISTINCT

    • 如果使用了 DISTINCT,那么它会在这个时候应用,去除重复的行。
  8. ORDER BY 子句

    • ORDER BY 子句是在最后执行的,用于对结果集进行排序。
    • 需要注意的是,排序是在所有的选择、投影和过滤之后进行的。
  9. LIMIT / OFFSET 子句

    • 最后处理的是 LIMIT 或 OFFSET 子句(在不同的数据库中可能有不同的名称,比如 TOP 或 ROWNUM),它们用于限制要返回的记录数。

但是这些是指逻辑执行顺序,实际数据库可能会通过其查询优化器来调整执行步骤,以便更高效地执行查询。例如,数据库可能会决定基于索引先执行 WHERE 子句中的过滤,而不是先执行FROM 和 JOIN。

tips:

特别需要注意

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值