在SQL中,查询中子句的执行顺序不一定与它们的写入顺序相同。以下是SQL查询的典型执行顺序:
1. FROM(或 JOIN)
- 这是第一个被处理的条款。“FROM”子句指定要从中检索数据的表或视图。如果要连接表,则这里是SQL决定如何组合表的地方。
2. ON(用于JOIN)
- 当涉及“JOIN”时,使用“ON”子句来指定表格合并的条件。它在“FROM”条款之后立即被评估。
3. WHERE
- 在“FROM”子句之后,“WHERE”子句将根据指定条件筛选行。只有满足“WHERE”条件的行才会包含在结果中。
4. GROUP BY
- “GROUP BY”子句根据指定的列对结果集进行分组。当要对每个组执行聚合(如“COUNT()”、“SUM()”、“AVG()”等)时,会使用它。
5. HAVING
- “HAVING”条款在通过“GROUP BY”条款组成群组后对其进行过滤。它类似于“WHERE”,但“HAVING”用于聚合条件(如“SUM()”、“COUNT()”等),而“WHERE”用于行级条件。
6. SELECT
- “SELECT”子句是指定要检索哪些列的地方。在完成所有筛选和分组后,这将按逻辑进行处理。
7. DISTINCT
- 如果使用“DISTINCT”,此步骤将在“SELECT”子句之后应用,从结果集中删除重复行。
8. ORDER BY
- “ORDER BY”子句根据指定的列对结果集进行排序。这是查询处理顺序中的最后几个步骤之一。
9. LIMIT / OFFSET(可选)
- 最后,“LIMIT”(在某些数据库中称为“TOP”)和“OFFSET”子句分别用于限制返回的行数和跳过一定数量的行。
可视化执行顺序:
-
FROM / JOIN
-
ON (if using JOIN)
-
WHERE
-
GROUP BY
-
HAVING
-
SELECT
-
DISTINCT
-
ORDER BY
-
LIMIT / OFFSET
示例:
SELECT DISTINCT column1, SUM(column2)
FROM table1
JOIN table2 ON table1.id = table2.id
WHERE column3 = 'value'
GROUP BY column1
HAVING SUM(column2) > 100
ORDER BY column1
LIMIT 10;
在此查询中:
-
“FROM”和“JOIN”将首先出现。
-
下一步将对连接的“ON”条件进行评估。
-
然后,“WHERE”子句筛选这些行。
-
“GROUP BY”对剩余行进行分组。
-
“HAVING”子句在聚合后过滤组。
-
“SELECT”子句指定要检索的数据。
-
“DISTINCT”删除重复行。
-
“ORDER BY”对结果进行排序。
-
“LIMIT”限制返回的行数。
此顺序确保SQL查询的每个部分都以正确的顺序逻辑地处理,使您能够逐步完善结果。
网友评论