SQL 中 select、from、join、where、group by、having、order by、limit 的执行顺序是什么?
SQL 中 select、from、join、where、group by、having、order by、limit 的执行顺序是什么?
回答重点
| 执行顺序 | SQL 子句 | 说明 |
|---|---|---|
| 1 | FROM | 确定数据源,执行表连接操作。 |
| 2 | JOIN | 执行连接操作,结合多张表的数据。 |
| 3 | WHERE | 过滤不符合条件的行。 |
| 4 | GROUP BY | 将数据按指定的列分组。 |
| 5 | HAVING | 过滤分组后的数据。 |
| 6 | SELECT | 选择要返回的列。 |
| 7 | ORDER BY | 对查询结果进行排序。 |
| 8 | LIMIT | 限制查询返回的行数。 |
具体可以参考下图:
扩展知识
SQL 查询的执行顺序进一步分析
1)FROM(确定数据源)
查询的执行首先从 FROM 子句开始,确定数据的来源(表、视图、连接等)。
2)JOIN(如果有 JOIN 操作)
在 FROM 子句之后,SQL 引擎会执行连接操作(JOIN),将多张表的数据结合起来。
3)WHERE(过滤行)
接下来,SQL 引擎会对来自 FROM 和 JOIN 的数据进行过滤,保留符合条件的行。**WHERE** 子句执行的是行级别的过滤。
4)GROUP BY(分组数据)
然后,SQL 引擎会按照 GROUP BY 子句中的字段进行分组操作,将数据分为若干组。
5)HAVING(过滤组)
HAVING 子句执行时会对已经分组的数据进行过滤,保留符合条件的组。与 WHERE 子句不同,**HAVING** 是用于过滤分组后的数据。
6)SELECT(选择列)
在经过上述的操作后,SQL 引擎会选择需要的列并进行返回。这个阶段是实际返回查询结果的地方。
7)ORDER BY(排序)
紧接着,SQL 引擎会按照 ORDER BY 子句中指定的列对结果进行排序。
8)LIMIT(限制返回的行数)
最后,**LIMIT** 子句限制查询结果的行数,只返回指定数量的行。
Comments