【MySQL】SELECT执行顺序
1.常见的查询结构
方式1:
SELECT ...,...,... 选择的字段 FROM ...,...,... 从哪些表中筛选 WHERE ...AND... 多表的连接条件,不包含组函数的过滤条件 GROUP BY ...,... HAVING 包含组函数的过滤条件 ORDER BY ...ASC/DESC 排序 LIMIT ...,... 分页
方式2:
SELECT ...,...,... FROM ... JOIN ... ON ... 多表的连接条件 JOIN ... ON ... WHERE ... AND/OR... 不包含组函数的过滤条件 GROUP BY ...,... HAVING ... 包含组函数的过滤条件 ORDER BY ... ASC/DESC LIMIT ...,...
2.SELECT执行顺序
(1)关键字的顺序
SELECT...FROM...WHERE...GROUP BY ... HAVING ... ORDER BY ... LIMIT ...
(2)SELECT语句的执行顺序
每一个步骤都会产生一个虚拟表,然后将这个虚拟表传入下一个步骤中作为输入。
FROM -> WHERE -> GROUP BY -> HAVING -> SELECT的字段 -> DISTINCT -> ORDER BY -> LIMIT
3.SQL执行原理
(1)先执行FROM
,如果是多张表联查
① 先通过CROSS JOIN
求笛卡尔积,得到虚拟表vt1-1。
② 通过ON
对vt1-1进行筛选,得到虚拟表vt1-2。
③ 使用的是左连接、右连接或者全连接,就会在vt1-2上增加外部行,得到vt1-3。
④ 两张表以上则会重复以上操作,直到所有表都被处理完为止
(2)假设拿到了查询数据表的原始数据 vt1,经过WHERE
筛选过滤,得到虚拟表vt2
(3)经过GROUP BY
分组得到vt3
(4)经过HAVING
进行分组过滤得到vt4
(5)经过SELECT
筛选字段得到vt5-1,经过DISTINCT
去重得到虚拟表vt5-2
(6)经过ORDER BY
排序得到虚拟表vt6
(7)经过LIMIT
分页得到vt7
分类:
数据库 / MySQL
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)