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_子查询和查询语句书写/执行顺序的主要内容,如果未能解决你的问题,请参考以下文章