当前位置:网站首页>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
边栏推荐
- Dynamic programming: maximum subarray
- 构造回文的最小插入次数
- Learn volatile, you change your mind, I see
- 接口测试工具Eolinker进行post请求
- CMS garbage collector
- Dynamic ReLU:微软推出提点神器,可能是最好的ReLU改进 | ECCV 2020
- Flink系列(0)——准备篇(流处理基础)
- Five design schemes of singleton mode
- C / C + + learning diary: original code, inverse code and complement code
- APReLU:跨界应用,用于机器故障检测的自适应ReLU | IEEE TIE 2020
猜你喜欢
CountDownLatch 瞬间炸裂!同基于 AQS,凭什么 CyclicBarrier 可以这么秀?
Test comparison of three domestic cloud databases
Using fastai to develop and deploy image classifier application
解决go get下载包失败问题
动态规划答疑篇
Proficient in high concurrency and multithreading, but can't use ThreadLocal?
装饰器(一)
Dynamic relu: Microsoft's refreshing device may be the best relu improvement | ECCV 2020
.NET Core 跨平台资源监控库及 dotnet tool 小工具
Wechat applet related
随机推荐
实验一作业
第五章
[elastic search technology sharing] - ten pictures to show you the principle of ES! Understand why to say: ES is quasi real time!
Implementation of warehouse management system with ABP (net core) + easyUI + efcore
Why need to use API management platform
后缀表达式转中缀表达式
Using fastai to develop and deploy image classifier application
An online accident caused by improper use of thread pool
Dynamic query processing method of stored procedure
计算机网络 应用层
用两个栈实现队列
Solve the problem that the value of new date() of JS in IE and Firefox is invalid date and Nan Nan
存储过程动态查询处理方法
文件拷贝的实现
大数据软件学习入门技巧
Django之简易用户系统(3)
abp(net core)+easyui+efcore实现仓储管理系统——出库管理之五(五十四)
Creating a text cloud or label cloud in Python
单例模式的五种设计方案
Swagger介绍和应用