6_MySQL_子查询和查询语句书写/执行顺序

Posted Jack·Kwok

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了6_MySQL_子查询和查询语句书写/执行顺序相关的知识,希望对你有一定的参考价值。

1. 子查询

mysql 的子查询比较多,但是一般我们很少会写很复杂的子查询,因为这样会使得 SQL 语句很复杂,因此这里只是简单举个例子:

select * from 数据表名1 where 字段1 = (select 字段2 from 数据表名2 where 字段3 = xx);

如上在 SQL 语句中嵌套 SQL 语句的情况叫子查询。

2. 查询语句的书写与执行顺序

前面我们学到查询语句可以通过不同的子句来筛选相应的数据,那么当它们出现在一个 SQL 语句中时,应该遵循什么书写顺序呢?应该遵循下面的书写顺序:

select ===> from ===> where ===> group by ===> having ===> order by ===> limit

书写顺序和执行顺序肯定不同,但执行的顺序又是怎么样的呢?假如有个查询语句包含了以下所有子句,那么我们好好来分析以下:
①首先,执行 from子句,确定目标是查询哪一张表;
②接着,执行where 子句,根据where语句排除掉部分数据(例如找出大于20的数据等等)
③接着,执行group up子句,根据分组条件,对where 语句筛选出来的数据进行分组,分成若干”小表“
④接着,执行having子句,根据筛选条件,再对每个小表中的数据分别筛选。
⑤接着,执行select子句,这个时候,已经知道了查询的结果(当然,顺序和限定数)还未知
⑥接着,执行order by子句,通过③的分组④的筛选后,再对每个小表的数据进行排序(可升序或降序)
⑦最后,执行limit子句,限制输出的记录条数,当然这个时候是以整张表为单位的,而不是针对每张小表来说的。

from ===> where ===> group by ===> having ===> select ===> order by ===> limi

以上是关于6_MySQL_子查询和查询语句书写/执行顺序的主要内容,如果未能解决你的问题,请参考以下文章

Oracle11g03_复杂的SQL语句

SQL执行顺序

mysql_子查询

MySQL_第四章

MYSQL初级学习笔记六:子查询!(视频序号:初级_37-41)

MySQL学习笔记连接子分页联合查询以及sql语句执行顺序总结