外观
SQL 语句的执行顺序
一般来说,SQL
语句的执行顺序如下:
- FROM:首先从指定的表或视图中获取数据,确定查询的数据源,这是查询的起点。如果有多个表,会先进行笛卡尔积操作生成虚拟表。
- ON:当存在
JOIN
操作时,ON
子句用于确定表之间的连接条件,对笛卡尔积的结果进行筛选,保留符合连接条件的行,生成新的虚拟表。 - JOIN:根据
JOIN
的类型(如INNER JOIN
、LEFT JOIN
、RIGHT JOIN
等),将连接操作后的结果添加到虚拟表中。如果有多个JOIN
链接,会重复执行这一步骤。 - WHERE:对前面得到的虚拟表中的数据进行筛选,只保留符合
WHERE
条件的行,进一步缩小结果集范围,生成新的虚拟表。 - GROUP BY:按照
GROUP BY
子句中指定的列对数据进行分组,将具有相同值的行划分为一组,生成按组聚合的虚拟表。 - HAVING:在分组后的基础上,对分组结果进行筛选,只有满足
HAVING
条件的组才会被保留,用于过滤聚合后的结果集,产生新的虚拟表。 - SELECT:选择需要返回的列,确定最终结果集中要显示的字段。可以对列进行计算、使用函数等操作,将选择的列插入到新的虚拟表中。
- DISTINCT:如果使用了
DISTINCT
关键字,对SELECT
后的结果进行去重操作,去除重复的行,得到唯一的结果集,生成去重后的虚拟表。 - ORDER BY:按照
ORDER BY
子句中指定的列和排序方式(升序或降序)对结果进行排序,生成排序后的虚拟表或游标。 - LIMIT / FETCH FIRST:用于限制返回结果的行数,在排序之后执行,只返回指定数量的行作为最终结果