当前位置: 首页 > news >正文

MySQL 查询语句的执行顺序

整理了下MySQL查询语句的执行顺序。

(1) FROM
(2) ON
(3) JOIN
(4) WHERE
(5) GROUP BY
(6) WITH (CUBE|ROLLUP)
(7) HAVING
(8) SELECT
(9) DISTINCT
(10) ORDER BY
(11) LIMIT

(1) FROM 子句 - 首先执行

FROM employees e
  • MySQL 会先读取 FROM 子句中的表信息

(2) ON 条件 - 连接条件过滤

JOIN departments d ON e.dept_id = d.id
  • 对连接表的行进行匹配
  • 只有满足 ON 条件的行才会被保留

(3) JOIN 操作 - 执行表连接

  • MySQL 支持多种连接方式:INNER JOIN、LEFT/RIGHT JOIN、CROSS JOIN

(4) WHERE 条件 - 行级过滤

WHERE e.salary > 5000 AND d.location = 'NY'
  • 此时不能使用 SELECT 中的别名
  • 不能使用聚合函数(如 COUNT, SUM 等)

(5) GROUP BY - 分组操作

GROUP BY d.name, e.position
  • 可以 GROUP BY 不在 SELECT 中的列
  • 分组后每组生成一行结果

(6) WITH CUBE/ROLLUP - 生成超组

GROUP BY d.name WITH ROLLUP
  • 生成小计和总计行

(7) HAVING - 分组后过滤

HAVING AVG(e.salary) > 6000
  • 可以使用聚合函数
  • 可以使用 SELECT 中的别名

(8) SELECT - 选择输出列

SELECT d.name, AVG(e.salary) as avg_sal
  • 计算表达式和函数调用
  • 定义列别名

(9) DISTINCT - 去重操作

SELECT DISTINCT department
  • MySQL 可能在 GROUP BY 时就已经去重

(10) ORDER BY - 结果排序

ORDER BY avg_sal DESC
  • 可以使用 SELECT 中定义的别名
  • 对最终结果集排序,性能消耗较大

(11) LIMIT - 结果限制

LIMIT 10 OFFSET 5
  • MySQL 特有语法,其他数据库可能用不同方式
  • 限制返回的行数

恐惧不是真实的,它只是对未来的一种自我暗示,是我们心灵的产物。-- 烟沙九洲

相关文章:

  • 在 WSL Ubuntu-24.04 上安装 Nacos 2.5.1 并使用 MySQL 数据库
  • Knife4j框架的使用
  • HOW - 简历和求职面试宝典(二)
  • 基于MATLAB实现SFA(Slow Feature Analysis,慢特征分析)算法
  • 湖北理元理律师事务所债务优化实践:在还款与生活间寻找平衡支点
  • 网络摄像机POE交换机选型指南:技术参数与场景适配深度解析
  • 多语种OCR识别系统,引领文字识别新时代
  • 深入剖析网络协议:七层协议与四层协议详解
  • 本地socket间通信,可以直接使用read读取socket中的结构体
  • JAVA重症监护系统源码 ICU重症监护系统源码 智慧医院重症监护系统源码
  • SpringBoot 日志
  • Windows 下如何打开设置环境变量的对话框
  • 区间DP概述(JAVA)
  • 重说话题“如何写好一份技术文档”
  • 【电拖自控】转速检测数字测速(脉冲计数测速)
  • unordered_map与map之间的区别和联系
  • 经典深度学习网络【一天了解一个ok?】【基本点创新点】
  • Android高级开发第二篇 - JNI 参数传递与 Java → C → Java 双向调用
  • Spring 核心知识点补充
  • 第6讲、 Odoo 18 `tools` 模块深度分析
  • 网站建设工作情况总结/线上网络平台推广
  • 永安网站建设/杭州百度seo代理
  • 个人网页制作源代码博客/贵州seo和网络推广
  • 东莞专业网站制作设计/营销策划书格式及范文
  • 网站策划的最终体现是什么/网站推广费用
  • 高端建站行业/百度提交入口网址