【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

posted @ 2022-08-17 14:32  植树chen  阅读(797)  评论(0编辑  收藏  举报