day1 一天解决一个问题-Mysql的sql语句的执行顺序

本文介绍了SQL语句的执行顺序,从FROM加载数据开始,经JOIN、WHERE过滤,到GROUP BY、HAVING分组计算,再到SELECT、DISTINCT、ORDER BY和LIMIT等步骤。当遇到SQL脚本结果不匹配预期时,可以据此顺序检查语法执行的正确性。
摘要由CSDN通过智能技术生成

大家好,我是乔木,这里是我的一天解决一个问题系列。

我们在写sql脚本的时候,会发现我们的脚本跑完之后如何我们的预想的结果不一致。但是检查了几遍之后,还是发现没有明显的语法错误,但是就是数据对不上,这时候我们可以检查我的是不是我们的sql语法执行顺序没有注意到。比如常规的在有聚合函数和窗口函数的时候,我们的语句的实行顺序是如何的。根据查看<<SQLserver的技术原理内幕>>这本书,我们可以发现sql语句的执行顺序如下:

SQL执行顺序:

# (8)SELECT (9)DISTINCT (11)<Top Num> <select list>

# (1)FROM [left_table]

# (3)<join_type> JOIN <right_table>

# (2) ON <join_condition>

# (4)WHERE <where_condition>

# (5)GROUP BY <group_by_list>

# (6)WITH <CUBE | RollUP>

# (7)HAVING <having_condition>

# (10)ORDER BY <order_by_list>

SQL语句中的执行顺序如下:

(1)首先是from tablename 加载到内存中

(2)如果有多表做笛卡尔积的时候,先执行on语句,参与计算过滤掉不符合条件的数据

(3)join语句把另外的表也加载到内存进来,并做计算

(4)where语句过滤数据不符合条件的数据

(5)group by filed1 对字段filed1进行分组,形成一个结果集

(6)with  as 作为子查询,用作简化复杂数据集,只能在下一次查询中使用,区别于视图

(7)having 条件1 可以把它当成一个可以在groub by之后结果集,之后对条件1进行计算。执行顺序GROUP BY >HAVING>ORDER BY ,且不能在where之后。having的字段可以是聚合/窗口函数的列,也可以是group by中的列。

(8)select 选取输出到客户端的数据列

(9)distinct 对已经结算出结果的结果集进行去重

(10)order by 对结果集进行排序

(11) 选出前几名到客户端,类似limit功能。

如果有任何问题,欢迎大家私信交流,每天进步一点点。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值