sql的语法顺序和执行顺序
SQL 是一种声明式语言
SQL 语言是为计算机声明了一个你想从原始数据中获得什么样的结果的一个范例,而不是告诉计算机如何能够得到结果。SQL 语言声明的是结果集的属性,计算机会根据 SQL 所声明的内容来从数据库中挑选出符合声明的数据,而不是像传统编程思维去指示计算机如何操作。所以最关键的一点是:SQL 的语法并不按照语法顺序执行。
sql的语法顺序
一般来说sql的语法顺序是:
- SELECT [DISTINCT]
- FROM
- JOIN
- ON
- WHERE
- GROUP BY
- HAVING
- UNION
- ORDER BY
- LIMIT
sql的解析顺序
- FROM FROM后面的表标识了这条语句要查询的数据源。和一些子句如,(1.1)笛卡尔积,(1.2)ON过滤,(1.3)添加外部列,所要应用的对象。FROM过程之后会生成一个虚拟表VT1。
- 笛卡尔积 这个步骤会计算两个相关联表的笛卡尔积(CROSS JOIN) ,生成虚拟表VT1-J1。
- ON过滤 这个步骤基于虚拟表VT1-J1这一个虚拟表进行过滤,过滤出所有满足ON 谓词条件的列,生成虚拟表VT1-J2。
- 添加外部行 如果使用了外连接,保留表中的不符合ON条件的列也会被加入到VT1-J2中,作为外部行,生成虚拟表VT1-J3。
- WHERE 对VT1过程中生成的临时表进行过滤,满足where子句的列被插入到VT2表中。
- GROUP BY 这个子句会把VT2中生成的表按照GROUP BY中的列进行分组。生成VT3表。
- 聚合函数
- HAVING 这个子句对VT3表中的不同的组进行过滤,满足HAVING条件的子句被加入到VT4表中。
- SELECT 这个子句对SELECT子句中的元素进行处理,生成VT5表。
- 计算表达式 计算SELECT 子句中的表达式,生成VT5-1 。
- DISTINCT 寻找VT5-1中的重复列,并删掉,生成VT5-2 。
- TOP 从ORDER BY子句定义的结果中,筛选出符合条件的列。生成VT5-3表
- ORDER BY 从VT5-3中的表中,根据ORDER BY 子句的条件对结果进行排序,生成VC6表。
- limit m,n:从第(m+1)条开始,显示n条记录。
猜你喜欢
数据库基础
3189
从数据库中挑选出符合声明的数据,而不是像传统编程思维去指示计算机如何操作。所以最关键的一点是:SQL的语法并不按照语法顺序执行。2.sql的语法顺序一般来说sql的语法顺序是:SELECT[DISTIN
数据库基础
2240
在看这篇文章之前相信你对sql的语法顺序和执行顺序已经有了足够的认识。如果还不了解sql的语法顺序和执行顺序请点击sql的语法顺序和执行顺序http://www.jiajiajia.club
weblog
2502
java使用原生jdbc连接数据库获取数据或执行sql语句(mysql) publicvoidtest2(){ try{ //加载MySql的驱动类 Class.forName
blog
java基础-编译执行和解释执行
java虚拟机(jvm)
3095
编译执行:“一次编译、到处运行”说的是Java语言跨平台的特性,Java的跨平台特性与Java虚拟机的存在密不可分,可在不同的环境中运行。比如说Windows平台和Linux平台都有相应的JDK,安装好
spring/springmvc
4575
springmvc项目启动时执行controller在springmvc的配置文件中加入controller的bean,注意bean加载的顺序beanclass
blog
for in 和 for of 的区别
javascript,前端
1143
jsjavascriptforin和forof的区别,forof遍历的原理
一、区别
forin是ES5的语法,forof是ES6的语法forin是无序遍历数组或对象的,也就是随机遍历,不按照顺序来
blog
插入排序 - 数据结构与算法
数据结构与算法
1412
算法思想:把所有需要排序的数据分成两个集合,一个是待排序集合,一个是已排序的集合,算法每次从未排序集合顺序或随机拿取一个数据,把它加入到已排序集合使其有序,直到未排序集合中的数据被取走完,算法结束
数据库
1195
,1warning(0.01sec)从执行计划中可以看出,该sql用的是文件排序,排序字段没有添加任何索引。 为什么文件排序会出现这种问题呢?主要还是取决与filesort的排序算法
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。