SQL 查询语句的执行顺序与编写查询语句的顺序不同,理解 SQL 查询的执行顺序有助于更好地优化和调试 SQL 查询。下面是 SQL 查询语句的基本的执行顺序:
- FROM: 确定数据源,包含表连接(
JOIN
)操作。 - ON: 定义连接条件(对于
JOIN
子句)。 - WHERE: 过滤数据,排除不符合条件的行。
- GROUP BY: 对数据进行分组。
- HAVING: 过滤分组后的数据,类似于
WHERE
但作用于分组后。 - SELECT: 投影,选择要返回的列,包含计算派生列。
- DISTINCT: 去除重复的行。
- ORDER BY: 对结果集进行排序。
- LIMIT / OFFSET: 限制返回的行数,跳过指定数量的行。
SQL 查询示例
SELECT DISTINCT department_id, COUNT(employee_id) AS num_employees
FROM employees
WHERE salary > 50000
GROUP BY department_id
HAVING COUNT(employee_id) > 5
ORDER BY num_employees DESC
LIMIT 10;
解释每一步的执行
-
FROM: 选择数据源
employees
表。FROM employees
-
WHERE: 过滤数据,仅保留
salary > 50000
的行。WHERE salary > 50000
-
GROUP BY: 对
department_id
列进行分组。GROUP BY department_id
-
HAVING: 过滤分组后的数据,仅保留
COUNT(employee_id) > 5
的分组。HAVING COUNT(employee_id) > 5
-
SELECT: 选择要返回的列,计算派生列
COUNT(employee_id) AS num_employees
。SELECT department_id, COUNT(employee_id) AS num_employees
-
DISTINCT: 去除重复的
department_id
行(此示例中不需要,因为GROUP BY
已经确保唯一)。SELECT DISTINCT department_id, COUNT(employee_id) AS num_employees
-
ORDER BY: 按
num_employees
降序排序结果。ORDER BY num_employees DESC
-
LIMIT: 限制返回的行数,仅返回前 10 行。
LIMIT 10
执行顺序总结
尽管 SQL 语句是按一定的书写顺序,但数据库引擎执行查询的顺序不同。理解这种执行顺序有助于优化查询性能和编写复杂查询。
图示化执行顺序
1. FROM employees
2. WHERE salary > 50000
3. GROUP BY department_id
4. HAVING COUNT(employee_id) > 5
5. SELECT department_id, COUNT(employee_id) AS num_employees
6. DISTINCT (if applicable)
7. ORDER BY num_employees DESC
8. LIMIT 10
这种顺序有助于理解 SQL 查询优化的基本原理,并帮助排除查询中的错误或性能问题。
标签:语句,COUNT,employees,查询,num,SQL,employee,id From: https://blog.csdn.net/hui_zai_/article/details/139757133