当前位置:网站首页>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
边栏推荐
猜你喜欢
随机推荐
Array acquaintance
Development and deployment of image classifier application with fastai
用两个栈实现队列
Learn volatile, you change your mind, I see
选择排序
Chapter five
接口测试工具Eolinker进行post请求
动态规划答疑篇
Solve the problem that the value of new date() of JS in IE and Firefox is invalid date and Nan Nan
The interface testing tool eolinker makes post request
构造回文的最小插入次数
[cloud service] there are so many ECS instances on alicloud server, how to select the type? Best practice note
在Python中创建文字云或标签云
Using annotation + interceptor to implement asynchronous execution
Iptables from introduction to mastery
Five factors to consider before choosing API management platform
给大家介绍下,这是我的流程图软件 —— draw.io
Django之简易用户系统(3)
Flink series (0) -- Preparation (basic stream processing)
Countdownlatch explodes instantly! Based on AQS, why can cyclicbarrier be so popular?







