MySQL中七个查询命令的优先级及特点

MySQL中7个查询命令的优先级:
FROM --> WHERE --> GROUP BY --> HAVING -->SELECT --> ORDER BY --> LIMIT
=======================================================================
在MySQL中执行查询命令时会自动创建临时表
什么是临时表,及特点:

  1. 由[查询命令]在内存中生成虚拟表,被称为临时表
  2. 当前查询命令执行完毕后,MySQL服务器自动的将上一个查询命令生成的临时表自动销毁处理
  3. 每一个查询命令操作的是上一个查询命令生成的临时表,除了[FROM] 命令 (因为它永远第一个执行)
  4. 临时报名称就是硬盘上表文件名
  5. 在一个查询语句结束后,用户看到的临时表只能是查询语句中最后一个查询命令生成的临时表
=======================================================================
FROM查询命令:
  1. FROM命令作用,将硬盘上的表文件加载到内存中生成一个临时表
  2. MySQL服务器存在7个查询命令,在一个查询语句执行时,永远第一个执行的查询命令是FROM {FROM SELECT }
=======================================================================
WHERE命令:
-----循环遍历临时表中每一个数据行,遍历时每次只会取得一个数据行来判断当前数据行是否满足定位条件.在循环遍历结束后,WHERE命令将所有满足条件的数据行读取出来生成一个全新的临时表
-----WHERE命令在FROM命令只会执行,因此操作的是FROM生成的临时表1
循环遍历临时表的所有数据行,每次读取一个数据行判断是否满足定位条件
【MySQL中七个查询命令的优先级及特点】在循环结束后,WHERE命令将所有满足定位条件的数据行读取出来保存到一个全新的临时表
=======================================================================
GROUP BY 查询命令:
  1. GROUP BY查询命令被称为[分组查询命令]
  2. 执行优先级:FROM --->WHERE ----> GROUP BY------>SELECT
  3. 书写格式:
SELECT 字段名 , 聚合函数
FROM 表名
WHERE 数据行定位条件
GROUP BY 分组字段
作用:
首先根据[分组字段]内容对临时表数据进行分类.
然后将具有相同特征的数据行保存到一个临时表中.
七个查询命令中,只有GROUP BY在执行完毕后才有可能生成多个临时表.
=======================================================================
HAVING 查询命令
  1. 执行的优先级: FROM --> WHERE --> GROUP BY --> HAVING --> SELECT
  2. 书写规则:
HAVING 就是GROUP BY 跟班小弟
①只有GROUP BY出现的时候,HAVING 才有机会出现,他不会独立出现在查询语句
②出现的时候,必须出现在GROUP BY 后面
作用:
对GROUP BY生成的临时表进行[统计分析],将不满足条件的临时表从内存中进行销毁 。HAVING任务是销毁掉内存中临时表.
HAVING通常与聚合函数共同使用;
=======================================================================
WHERE 与 HAVING的区别:
WHERE 命令执行完毕后,将满足条件数据行读取出来生成一个全新的临时表
HAVING命令执行时,负责将GROUP BY生成的临时表中不满足条件的临时表进行销毁
-----------------------------------------------------------------------------------------------------------------
WHERE每次操作一个数据行,因此WHERE后边的判断条件不能使用聚合函数
HAVING每次操作的是一个临时表,因此HAVING后面应该使用聚合函数作为判断条件
-----------------------------------------------------------------------------------------------------------------
WHERE命令必须声明在GROUP BY 前方
HAVING命令必须生命在GROUP BY后方
=======================================================================
SELECT行为特征:
  1. 如果SELECT操作的临时表由(FROM或者WHERE)提供,此时SELECT像切蛋糕一样将制定字段所有的内容读取出来,组成一个全新的临时表
  2. 如果SELECT操作的临时表由(GROUP BY 或者 HAVING)提供,此时SELECT可能面对多个临时表,SELECT将会一次操作每一个临时表.在操作某一个临时表时,只会读取指定字段的[第一行数据],然后将从多个临时表读取内容组成一个全新的临时表.
SELECT 操作的是GROUP BY 提供的临时表,此时读取的字段内容应该能表示当前临时表所有数据共同特征,因此此时SELECT读取字段一般都是GROUP BY所采用分组字段
=======================================================================
ORDER BY 查询命令
  1. 执行优先级: FROM --> WHERE --> GROUP BY -->HAVING --> SELECT -->ORDER BY


    推荐阅读