优秀的编程知识分享平台

网站首页 > 技术文章 正文

MySQL:查询语句各子部分执行顺序(mysql查询部分数据)

nanyue 2024-10-27 11:27:39 技术文章 2 ℃

在SQL中,SELECT 语句的各个部分(如 SELECT、FROM、WHERE、GROUP BY、HAVING 等)有其特定的执行顺序,但这并不完全等同于它们在SQL语句中的物理顺序。以下是这些部分的逻辑执行顺序(也被称为查询的执行计划或查询处理的步骤):

  1. FROMJOIN数据库首先确定要从哪些表中检索数据,并执行任何必要的表连接操作。
  2. WHERE接下来,数据库会应用 WHERE 子句中的条件来过滤掉不满足条件的行。
  3. GROUP BY然后,数据库会根据 GROUP BY 子句中指定的列对结果进行分组。
  4. 聚合函数(如 SUM(), COUNT(), AVG() 等)在分组后,数据库会计算任何在 SELECT 语句中指定的聚合函数。
  5. HAVING在应用了聚合函数之后,HAVING 子句会进一步过滤掉不满足其条件的组。注意,HAVING 是在 GROUP BY 之后应用的,而 WHERE 是在 GROUP BY 之前。
  6. SELECT现在,数据库会选择要显示的列。这包括任何在 SELECT 语句中明确指定的列,以及任何聚合函数的结果。
  7. ORDER BY数据库会根据 ORDER BY 子句中的列对结果进行排序。如果未指定 ORDER BY,则结果集的顺序可能是不确定的。
  8. LIMIT / OFFSET(在某些数据库中)数据库会限制返回的行数,并可能跳过一定数量的行(例如,在分页场景中)。


以下面查询语句为例进行说明:

SELECT select_cloumns FROM table WHERE some_condition GROUP BY group-cloumns HAVING some_aggregate_condition;

那么,其逻辑执行顺序将是:

  1. 从 table 中选择数据(根据 FROM)。
  2. 应用 WHERE 条件(some_condition)。
  3. 根据 group-cloumns列对数据进行分组。
  4. 计算任何聚合函数(虽然在这个例子中我们没有明确指定)。
  5. 应用 HAVING 条件(some_aggregate_condition)。
  6. 选择 select_cloumns列来显示结果。

注意:虽然上述步骤描述了逻辑执行顺序,但实际的物理执行计划可能会因数据库优化器的决策而有所不同。

最近发表
标签列表