当前位置:网站首页>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
边栏推荐
猜你喜欢

Decorator (1)
![[200 interview experience], programmer interview, common interview questions analysis](/img/fb/625e17f83f6be064f7387e78ec082a.jpg)
[200 interview experience], programmer interview, common interview questions analysis

Five design schemes of singleton mode

Learn volatile, you change your mind, I see

实验一作业

第一部分——第1章概述

Countdownlatch explodes instantly! Based on AQS, why can cyclicbarrier be so popular?

Solve the failure of go get download package

Experiment 1 assignment

Test comparison of three domestic cloud databases
随机推荐
Iterm2 configuration and beautification
经典动态规划:最长公共子序列
Implementation of warehouse management system with ABP (net core) + easyUI + efcore
Case analysis of entitycore framework
Mongodb database
Dynamic relu: Microsoft's refreshing device may be the best relu improvement | ECCV 2020
用两个栈实现队列
在Python中创建文字云或标签云
LeetCode 45 跳跃游戏II
Realization of file copy
给大家介绍下,这是我的流程图软件 —— draw.io
RSA asymmetric encryption algorithm
给大家介绍下,这是我的流程图软件 —— draw.io
大数据岗位基础要求有哪些?
Five phases of API life cycle
Django之简易用户系统(3)
CMS垃圾收集器
Using GaN based oversampling technique to improve the accuracy of model for mortality prediction of unbalanced covid-19
后缀表达式转中缀表达式
快来看看!AQS 和 CountDownLatch 有怎么样的关系?