SQL语句的执行顺序

简介: 我们都知道一段简短的sql语句其实都不是按照我们书写的顺序从左往右执行,它是按照sql语句中的语法和函数的优先级进行解析,将上一个函数执行的结果返回给下一个函数使用,从而得到最终的结果,并且在sql语句执行的过程中会产生不同的中间临时表。那么sql语句中常见的函数和语法的优先级究竟是什么顺序呢?

我们都知道一段简短的sql语句其实都不是按照我们书写的顺序从左往右执行,它是按照sql语句中的语法和函数的优先级进行解析,将上一个函数执行的结果返回给下一个函数使用,从而得到最终的结果,并且在sql语句执行的过程中会产生不同的中间临时表。那么sql语句中常见的函数和语法的优先级究竟是什么顺序呢?


以下面这段sql语句为例,包含了常见的函数和语法,那么它的执行顺序是什么样的呢


select distinct p1.price from product1 p1 join on product2 p2 on p1.id=p2.id where p2.name=nike group by p2.size having count(*)>10 order by p1.number limit 100;
复制代码


1、from


其实数据库的查询语句就好比我们在商店买东西,我们如果要买鞋,第一步肯定是要先找到一家店,同理sql语句也是第一步就是通过from来找到后面要进行查询的表,这样才能进行后续的操作。上述语句则是通过from找到要执行的表product1


2、join 和 on


如果我们想买一双鞋,那么肯定要将喜欢的款式和大小然后将这家店的价格和其他店的价格进行比较,那么就涉及到了两家店,所以还要找到另外一家店,才能找到里面的商品。而join则是连接两家店,on表示连接条件,比如鞋的价格 一样等等。


sql语句中通过from关键字找到了第一张表,如果这时候涉及到了第二张表,那么就要用join 来找到第二张表,并通过on后面的条件将第一张表和第二张表进行关联。join后面接的是要关联的表,on后面是连接的条件。如果sql语句中有此过程,则通过from和join on选择出需要查询的表1和表2,并产生笛卡尔积,生成表1和表2合并的临时中间表Temp1。on则确定表的绑定关系,通过on会产生临时中间表Temp2。


3、where


当我们找到了两家店了,买东西的时候不盲目的选择,而且有自己的要求,比如款式、价格、大小等等,这时候就需要用到where关键字。


where关键字表示筛选,根据where后面的条件对数据进行过滤,按照指定的字段的值筛选需要的数据,如果有多个条件可以使用and连接符进行联合筛选,如果在此阶段找不到数据,会直接返回客户端,不会往下进行。如果sql语句中有次过程,则这个过程会生成一个临时中间表Temp3。


在where条件语句中不可以使用聚合函数,比如min、max、count、sum、avg等函数。


4、group by


如果我们对一些条件进行筛选后,可能还是有很多的鞋符合我们的要求,我们可以对这些鞋进行分组,这样结果就能一目了然。比如按照鞋子的价格对这些鞋子进行分组。此时就需要用到group by语句。


group by是对数据按照固定的字段进行分组,如果有此过程会产生临时中间表Temp4,

group by 并不会改变数据的结果,只会改变数排列的顺序。


5、Having


对于分好组的鞋子,我们还可以进行筛选,只保留满足条件的组。这时候就需要用到having语句。Having语句通常与group by 语句联合使用,用来过滤由group by 语句返回的结果集。前面说了where语句中不能使用聚合函数,则Having语句的存在则弥补了where关键字不能与聚合函数联合使用的不足。


6、select


对于重重筛选出来的鞋子,就是我们想要买的鞋子了,这些鞋子这时候才会展示在我们面前。而select就表示将那些符合条件的数据以规定好的样式展示出来。


7、distinct


这时候找出来的鞋子,每组符合条件的鞋子价格、样式、大小都一样,但是可能不止一个,但我们买鞋肯定一样的鞋子只买一个,这时候就可以使用Distinct语句对这些鞋子进行去重,一样的鞋子只保留一双。


8、order by


这时候还可以对这些鞋子进行一个排序,比如按照买的人的多少(降序或者升序,默认升序),这时候可以通过order by加上字段名对结果集进行排序 ,这个过程比较耗费资源。


9、limit


对于已经排好序的鞋子,我们并不需要所有的,只需要前面的1个,而这一个就是我们通过重重筛选找出来的自己想要买的鞋子,这时候可以借助limit关键字,limit关键字加数字就表示取数据的前多少个结果进行展示。


至此这一整条sql语句才执行完毕。以上就是在一条包含各种函数和关键字的sql语句中各函数的执行顺序。


执行顺序总结如下:


1、from


2、join on


3、where


4、group by


5、having


6、select


7、distinct


8、order by


9、limit


以上就是对于sql语句执行顺序的简单的总结!

目录
相关文章
|
5月前
|
SQL 关系型数据库 MySQL
MySQL - 一文解析 SQL 的执行顺序
MySQL - 一文解析 SQL 的执行顺序
157 0
|
5月前
|
SQL 关系型数据库 MySQL
MySQL之SQL执行顺序
MySQL之SQL执行顺序
60 0
|
SQL XML Oracle
Mybatis动态SQL语句查询,实现一个参数 可查询多个字段。
Mybatis动态SQL语句查询,实现一个参数 可查询多个字段。
468 0
Mybatis动态SQL语句查询,实现一个参数 可查询多个字段。
|
5月前
|
SQL 数据处理 流计算
实时计算 Flink版产品使用合集之sql真正的执行顺序是怎样的
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
1月前
|
SQL 数据库 C++
SQL 执行顺序,通俗易懂!
在数据库的世界里,SQL(Structured Query Language)是我们与数据对话的桥梁。编写一个高效的SQL查询,不仅要求我们理解数据库的结构和数据模型,还需要掌握SQL的执行顺序。但往往,这个顺序与我们在编写SQL时书写的顺序并不一致,这常常让初学者感到困惑。今天,我们就来用通俗易懂的方式,揭开SQL执行顺序的神秘面纱。
53 2
|
4月前
|
SQL Oracle 关系型数据库
mysql和oracle 命令行执行sql文件 数据库执行sql文件 执行sql语句
mysql和oracle 命令行执行sql文件 数据库执行sql文件 执行sql语句
66 0
|
5月前
|
SQL 关系型数据库 MySQL
SQL-分页查询and语句执行顺序
SQL-分页查询and语句执行顺序
|
12月前
|
SQL 存储 关系型数据库
MySQL的第一篇文章——了解数据库、简单的SQL语句
MySQL的第一篇文章——了解数据库、简单的SQL语句
|
SQL 测试技术 数据处理
SQL语法基础——SQL查询语句的执行顺序解析(建议收藏)
SQL语法基础——SQL查询语句的执行顺序解析(建议收藏)
|
SQL 关系型数据库 MySQL
项目实战典型案例2——sql优化 mysql执行顺序 explain关键字进行性能分析
项目实战典型案例2——sql优化 mysql执行顺序 explain关键字进行性能分析
208 0
下一篇
无影云桌面