在 SQL 中,一条查询语句的执行顺序通常是从内到外的,这意味着它的处理步骤并不完全按照书写的顺序。以下是一个典型 SQL 查询语句的执行顺序:
一、执行顺序
1.1、FROM
确定要查询的表,并从中提取数据。此阶段可能会涉及到联接操作。
1.2、JOIN
如果查询涉及多个表的联接,则在这一阶段执行。所有联接条件将在此处评估。
1.3、WHERE
过滤结果集,仅保留满足条件的记录。此步骤在数据提取后立即进行。
1.4、GROUP BY
将结果集按指定字段进行分组。这通常与聚合函数(如 COUNT、SUM 等)一起使用。
1.5、HAVING
在分组后进行的过滤操作,用于过滤聚合结果集中的记录。
1.6、SELECT
确定要返回的列,包括计算字段、聚合函数等。在这一阶段执行选择和计算操作。
1.7、DISTINCT
如果指定了 DISTINCT,则在这一阶段去除重复的记录。
1.8、ORDER BY
对结果集按指定列进行排序。这是在所有过滤和分组操作之后进行的。
1.9、LIMIT/OFFSET
如果使用了 LIMIT 或 OFFSET,则在此阶段限制返回的记录数量或指定结果的起始位置。
二、示例查询
2.1、sql
SELECT DISTINCT name, COUNT(*)
FROM students
WHERE age > 18
GROUP BY name
HAVING COUNT(*) > 1
ORDER BY name
LIMIT 10;
2.2、执行顺序
FROM students
WHERE age > 18
GROUP BY name
*HAVING COUNT() > 1**
*SELECT DISTINCT name, COUNT()**
ORDER BY name
LIMIT 10
三、总结
SQL 查询的执行顺序遵循特定的逻辑步骤,尽管我们书写时可能不按照这个顺序。
理解这个执行顺序有助于优化查询性能和理解查询结果。
mysql 第3.22章 查询-查询语句的执行顺序