当前位置:网站首页>SQL语句的执行
SQL语句的执行
2020-11-08 21:14:00 【讓丄帝愛伱】
SQL,脚本查询语言,处理代码的顺序不是按照脚本语言的顺序,这点是不同于其他编程语言的最明显特征。
SQL语言常见的比如,Mysql,HiveQL,Oracle等,虽然语法上存在一些差异,但它们在解释查询脚本上,尤其是在解析语句执行顺序上具有共性。如果将脚本语言分解为一系列的语句,那么这些语句的先后执行顺序是怎样的呢?
Select语句执行顺序
select
查询语句的执行顺序,可以看出首先执行FROM
子句,最后执行ORDER BY
执行顺序:
(1) FROM
(2) ON
(3) JOIN
(4) WHERE
(5) GROUP BY
(6) WITH {CUBE | ROLLUP}
(7) HAVING
(8) SELECT
(9) DISTINCT
(10) ORDER BY
(11) LIMIT
7 SELECT (查询内容)
1 FROM <left table> (查询主表)
3 <join type> JOIN <right table> (关联的表)
2 ON <join condition> (两表关联条件)
4 WHERE (过滤查询结果的条件)
5 GROUP BY (分组条件)
6 HAVING (过滤分组的条件)
8 ORDER BY (排序条件)
# 前面的数字为实际程序执行时的顺序,
# 要养成良好的代码格式,该空行空行,该大写大写(数据库操作的词尽量保持大写,库表列内容等尽量保持小写)
以上逻辑顺序简介
以上每个步骤都会产生一个虚拟表,该虚拟表被用作下一个步骤的输入。只有最后一步生成的表才会返回给调用者。
- FROM:对FROM子句中的前两个表执行笛卡尔积(交叉联接),生成虚拟表VT1,选择相对小的表做基础表。
- ON:对VT1应用ON筛选器,只有那些使为真才被插入到VT2。
- OUTER (JOIN): 如果指定了OUTER JOIN(相对于CROSS JOIN或INNER JOIN),保留表中未找到匹配的行将作为外部行添加到VT2,生成TV3。
- WHERE:对VT3应用WHERE筛选器,只有使为true的行才插入VT4。
- GROUP BY:按GROUP BY子句中的列对VT4中的行进行分组,生成VT5。
- CUTE|ROLLUP:把超组插入VT5,生成VT6。
- HAVING:对VT6应用HAVING筛选器,只有使为true的组插入到VT7。
- SELECT:处理SELECT列表,产生VT8。
- DISTINCT:将重复的行从VT8中删除,得到VT9。
- ORDER BY:将VT9中的行按ORDER BY子句中的列列表顺序,生成一个游标(VC10)。
- LIMIT(TOP):从VC10的开始处选择指定数量或比例的行,生成表VT11,并返回给调用者。
版权声明
本文为[讓丄帝愛伱]所创,转载请带上原文链接,感谢
https://my.oschina.net/u/2425659/blog/4708341
边栏推荐
猜你喜欢
The interface testing tool eolinker makes post request
The interface testing tool eolinker makes post request
CMS垃圾收集器
使用基于GAN的过采样技术提高非平衡COVID-19死亡率预测的模型准确性
CountDownLatch 瞬间炸裂!同基于 AQS,凭什么 CyclicBarrier 可以这么秀?
Problem solving templates for subsequence problems in dynamic programming
后缀表达式转中缀表达式
Swagger介绍和应用
Using GaN based oversampling technique to improve the accuracy of model for mortality prediction of unbalanced covid-19
Octave基本语法
随机推荐
接口测试用例思路总结
构造回文的最小插入次数
Introduction and application of swagger
Five phases of API life cycle
第五章
Why need to use API management platform
PAT_ Grade A_ 1056 Mice and Rice
Newbe.ObjectVisitor Example 1
给大家介绍下,这是我的流程图软件 —— draw.io
第一部分——第1章概述
Proficient in high concurrency and multithreading, but can't use ThreadLocal?
Using annotation + interceptor to implement asynchronous execution
Summary of interface test case ideas
Swagger介绍和应用
移动大数据自有网站精准营销精准获客
Array acquaintance
Swagger介绍和应用
Why need to use API management platform
Computer network application layer
Fiddler无法正常抓取谷歌等浏览器的请求_解决方案