常见SQL语句执行顺序解析

以最一般的写法为例:

SELECT DISTINCT
	< SOME_FIELDS >
FROM
	< TABLE1 >
JOIN < TABLE2 > ON < ON_CONDITION >
WHERE
	< WHERE_CONDITION >
GROUP BY
	< SOME_EXISTS_FIELDS >
HAVING
	< SOME_NOTEXISTS_FIELDS >
ORDER BY
	< SOME_EXISTS_FIELDS >
LIMIT [ OFFSET ,...]

执行顺序分析:

  1. FROM: 指定了要查询的表,后续一系列的操作会围绕这两张表展开,这里还需要注意一个概念,就是虚拟表的概念,每一个SQL操作或生成一张对应的虚拟表,FROM操作也是,这里只是说明一般执行的顺序,要想知道具体执行的细节,我想除了去仔细阅读SQL实现操作的源码没有更好的途径。所以这里FROM操作也是产生了虚拟表
  2. ON:这里需要了解join操作的执行逻辑,很多人都会对where和on之间执行的顺序很模糊。那么这里明确一下二者的执行顺序,显然实现执行ON操作。利用ON根据具体的join操作在由上一步产生的虚拟表中筛选出符合ON_CONDITION的数据行 ,又产生新的虚拟表
  3. JION:利用上一步产生的虚拟表左连接操作。关于join操作不了解的请看——传送门。还是会产生新的虚拟表
  4. WHERE:根据上一步产生的虚拟表,利用WHERE_CONDITION过滤去不符合的记录。又又产生一张虚拟表
  5. GROUP BY:将虚拟表根据已存在字段进行分组。分组概念不清楚还是看上面那个传送门。新的虚拟表不要忘了,哈哈。
  6. HAVING:后面一般跟聚合函数,且其必须配合group by一起使用,作用是将分组后的结果根据一定条件进行过滤。这时又又又产生新虚拟表
  7. SELECT:将数据插入到新虚拟表的指定列,注意这里是新产生的虚拟表呀,^ _ ^.
  8. DISTINCT:去重。新虚拟表重于一切
  9. ORDER BY:排序。新...
  10. LIMIT:控制返回记录条数。新...(没力气再多打那三个字了,自行体会)

最后在说明下执行顺序对我们日常编写SQL的重要性,我认为这是我们能优化sql的前提,调试错误SQL的基石,定位错误的好帮手。因为之前自己也没有去想过SQL的顺序,其实是没有去想过,之前学其他编程语言的时候,总会去debug代码,这也是我们能充分理解程序执行的逻辑,帮助我门更好的提升。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值