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. HAVING 子句

    • HAVING 子句对 GROUP BY 的结果进行再次过滤,这一步是在分组后对组应用条件,通常与聚合函数一起使用。
  6. SELECT 子句

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

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

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

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

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

你可能感兴趣的:(sql,数据库,mysql)