问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

请问sql语句中的select是不是最后才执行的,谢谢

发布网友 发布时间:2022-04-29 20:18

我来回答

6个回答

懂视网 时间:2022-05-03 09:31

于是我研究了一下,发现在SQL语句的执行顺序中,SELECT并不是最先执行的,而是在第五个。

技术图片

上面这张图与SQL查询语句的语义有关,能让你知道一个查询会返回什么,并回答了以下这些问题:

1.可以在GROUP BY之后使用WHERE吗?(不行,WHERE是在GROUP BY之前!)

2.可以对窗口函数返回的结果进行过滤吗?(不行,窗口函数是SELECT语句里,而SELECT是在WHERE和GROUP BY之后)

3.可以基于GROUP BY里的东西进行ORDER BY吗?(可以,ORDER BY基本上是在最后执行的,所以可以基于任何东西进行 ORDER BY)

4.LIMIT是在什么时候执行?(在最后!)

但数据库引擎并不一定严格按照这个顺序执行SQL查询,因为它们为了更快地执行查询,会对执行顺序做出一些优化。也就是说,当涉及查询性能或者与索引有关的东西时,这张图就不适用了。

混合因素:列别名

有很多SQL实现允许你使用这样的语法:

SELECT CONCAT(first_name, ‘ ‘, last_name) AS full_name, count(*)
FROM table
GROUP BY full_name

从这个语句来看,好像GROUP BY是在SELECT之后执行的,因为它引用了SELECT中的一个别名。但实际上不一定要这样,数据库引擎可以把查询重写成这样:

SELECT CONCAT(first_name, ‘ ‘, last_name) AS full_name, count(*)
FROM table
GROUP BY CONCAT(first_name, ‘ ‘, last_name)

这样GROUP BY仍然先执行,另外数据库引擎还会做一系列检查,确保SELECT和GROUP BY中的东西是有效的,所以会在生成执行计划之前对查询做一次整体检查。

数据库可能不按顺序执行查询(优化)

在实际当中,数据库不一定会按照JOIN、WHERE、GROUP BY的顺序来执行查询,因为它们会进行一系列优化,把执行顺序打乱,从而让查询执行得更快,只要不改变查询结果。

下面这个查询说明了为什么需要以不同的顺序执行查询:

SELECT *
FROM owners 
 LEFT JOIN cats
 ON owners.id = cats.owner
WHERE cats.name = ‘tommy‘

如果只需要找出名字叫tommy的猫,那就没必要对两张表的所有数据执行左连接,而是应该在连接之前先进行过滤,这样查询会快得多。而且对于这个查询来说,先执行过滤并不会改变查询结果。因此在这里数据库引擎会根据执行效率最优对执行顺序进行优化,生成相对应的执行计划方案。

 

"不要眼眶一红,就觉得人间不值得。"

sql查询语句并不是最先执行SELECT

标签:src   rom   关键字   span   tom   ast   而且   执行sql   解释   

热心网友 时间:2022-05-03 06:39

不是啊,你写在那里就执行的啊
只不过要先去判断执行的条件,判断完才会执行

热心网友 时间:2022-05-03 07:57

貌似,where前面的是顺序执行,where后面的是从后向前执行。 order by就不知道了。例如:select * from tableA a where a.id='1' and a.name = 'java'; where前面的SQL都是顺序执行的,where后面的,是先查询name='java',再查询id='1'。

热心网友 时间:2022-05-03 09:31

SELECT 字段A AS 别名A
FROM 表名
WHERE 条件
GROUP BY 条件
HAVING 条件
ORDER BY 别名A

ORDER BY为最后处理 ,如果未存在ORDER BY SELECT是最后执行的
所以 ORDER BY 可以用别名A
WHERE 条件别名A
GROUP BY 条件别名
HAVING 条件别名
将直接出错 因为 字段都还未查出不未存在别名

热心网友 时间:2022-05-03 11:23

是按从上到下的顺序执行的,如果有判断和循环另算

热心网友 时间:2022-05-03 13:31

不是的
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
五月天的历年专辑价钱及曲目 五月天的所有专辑? 五月天一共有多少专辑啊? 请问男女之间的爱情有性才能维持吗? 迈克尔 杰克逊的最好听的十首歌 给个下载地址 分公司是否可以和员工签订劳动合同 分公司能否与员工签立劳动合同? 分公司可以与员工签订劳动合同的吗 分公司可否签订劳动合同 分公司能否签劳动合同 计划完成程度怎么算啊 select 查询语句 的where条件后有多个限制条件的话,他会怎么执行,是从... 请到系统设置中检查是否给予企业微信录音权限? 经济适用房可以贷款吗有哪些贷款方式 select * from (select top 3 * from ceshi1 ) as y order by y.score,该语句的执行顺序? 感谢 微信怎样开启录音权限 ERP,计划产出量,毛需求量什么的,怎么求呀 计划数与实际完成产值的计算方法 提前期怎写出计划投入量?ERP报表,感激 什么是在制品定额法,有什么适用性及步骤? 计划完成程度计算公式是什么? 主生产计划的数量概念 中间产出部分又投入,如何计算首次至最终的投入产出? 主生产计划的计算过程 计划产出量,计划投入量,计划接受量怎么算 erp财务费用的计算公式 请问这题的主生产计划中的计划投入量和计划产出量怎么算。 erp计划投入量怎么算 穿越小说 女主角要会武功 急求穿越女强小说 怎样计算完成年度计划的百分比 统计学中计划完成程度的计算 经济适用房怎样办贷款 关于Linux下一个小程序中select()函数的问题,这个程序中select到底执行了几次? 在SQL语句中,select,where,group by,having,order by,这几个关键字程序... sql语句执行顺序、 OPPO Ace2反向无线充电设置路径? 大众cc和k5起亚百里加速比赛视频 OPPO支持手机无线反向充电功能吗? 经济适用房 怎么贷款 OPPO手机有无线反向充电功能吗? 2011款一汽大众CC2.0T最高时速是多少?百公里油耗是多少?谢谢 ace2手机盒里有反向充电器吗? 大众cc 2.0t急加速延迟。 求助 经济适用房如何贷款 大众cc加速汽车抖动无力并有噗噗声 ace2反向充电都可以给哪些手机 宝马gt320和大众cc哪个提速快? 大众cc加速抖动 oppo w51能和ACE2反向充电不?