找回密码
 立即注册
首页 业界区 安全 MySQL 查询语句的执行顺序

MySQL 查询语句的执行顺序

戈森莉 2025-5-30 13:58:53
​整理了下MySQL查询语句的执行顺序。
  1. (1) FROM
  2. (2) ON
  3. (3) JOIN
  4. (4) WHERE
  5. (5) GROUP BY
  6. (6) WITH (CUBE|ROLLUP)
  7. (7) HAVING
  8. (8) SELECT
  9. (9) DISTINCT
  10. (10) ORDER BY
  11. (11) LIMIT
复制代码
(1) FROM 子句 - 首先执行
  1. FROM employees e
复制代码

  • MySQL 会先读取 FROM 子句中的表信息
(2) ON 条件 - 连接条件过滤
  1. JOIN departments d ON e.dept_id = d.id
复制代码

  • 对连接表的行进行匹配
  • 只有满足 ON 条件的行才会被保留
(3) JOIN 操作 - 执行表连接


  • MySQL 支持多种连接方式:INNER JOIN、LEFT/RIGHT JOIN、CROSS JOIN
(4) WHERE 条件 - 行级过滤
  1. WHERE e.salary > 5000 AND d.location = 'NY'
复制代码

  • 此时不能使用 SELECT 中的别名
  • 不能使用聚合函数(如 COUNT, SUM 等)
(5) GROUP BY - 分组操作
  1. GROUP BY d.name, e.position
复制代码

  • 可以 GROUP BY 不在 SELECT 中的列
  • 分组后每组生成一行结果
(6) WITH CUBE/ROLLUP - 生成超组
  1. GROUP BY d.name WITH ROLLUP
复制代码

  • 生成小计和总计行
(7) HAVING - 分组后过滤
  1. HAVING AVG(e.salary) > 6000
复制代码

  • 可以使用聚合函数
  • 可以使用 SELECT 中的别名
(8) SELECT - 选择输出列
  1. SELECT d.name, AVG(e.salary) as avg_sal
复制代码

  • 计算表达式和函数调用
  • 定义列别名
(9) DISTINCT - 去重操作
  1. SELECT DISTINCT department
复制代码

  • MySQL 可能在 GROUP BY 时就已经去重
(10) ORDER BY - 结果排序
  1. ORDER BY avg_sal DESC
复制代码

  • 可以使用 SELECT 中定义的别名
  • 对最终结果集排序,性能消耗较大
(11) LIMIT - 结果限制
  1. LIMIT 10 OFFSET 5
复制代码

  • MySQL 特有语法,其他数据库可能用不同方式
  • 限制返回的行数
恐惧不是真实的,它只是对未来的一种自我暗示,是我们心灵的产物。-- 烟沙九洲
 ◀
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册