sql执行原理
SELECT 是先执行 FROM 这一步的。在这个阶段,如果是多张表联查,还会经历下面的几个步骤:
- 首先先通过 CROSS JOIN 求笛卡尔积,相当于得到虚拟表 vt(virtual table)1-1;
- 通过 ON 进行筛选,在虚拟表 vt1-1 的基础上进行筛选,得到虚拟表 vt1-2;
- 添加外部行。如果我们使用的是左连接、右链接或者全连接,就会涉及到外部行,也就是在虚拟表 vt1-2 的基础上增加外部行,得到虚拟表 vt1-3。
-
当然如果我们操作的是两张以上的表,还会重复上面的步骤,直到所有表都被处理完为止。这个过程得到是我们的原始数据。
-
当我们拿到了查询数据表的原始数据,也就是最终的虚拟表
vt1
,就可以在此基础上再进行WHERE 阶段
。在这个阶段中,会根据vt1
表的结果进行筛选过滤,得到虚拟表vt2
。 -
然后进入第三步和第四步,也就是
GROUP
和HAVING
阶段 。在这个阶段中,实际上是在虚拟表vt2
的基础上进行分组和分组过滤,得到中间的虚拟表vt3
和vt4
。 -
当我们完成了条件筛选部分之后,就可以筛选表中提取的字段,也就是进入到
SELECT
和DISTINCT
阶段 。 -
首先在 SELECT 阶段会提取想要的字段,然后在 DISTINCT 阶段过滤掉重复的行,分别得到中间的虚拟表
vt5-1
和vt5-2
。 -
当我们提取了想要的字段数据之后,就可以按照指定的字段进行排序,也就是
ORDER BY
阶段 ,得到虚拟表vt6
。 -
最后在 vt6 的基础上,取出指定行的记录,也就是
LIMIT 阶段
,得到最终的结果,对应的是虚拟表vt7
。 -
当然我们在写 SELECT 语句的时候,不一定存在所有的关键字,相应的阶段就会省略。
-
同时因为 SQL 是一门类似英语的结构化查询语言,所以我们在写 SELECT 语句的时候,还要注意相应的关键字顺序,所谓底层运行的原理,就是我们刚才讲到的执行顺序。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本