MySQL中7个查询命令的优先级:
FROM --> WHERE --> GROUP BY --> HAVING -->SELECT --> ORDER BY --> LIMIT
=======================================================================
在MySQL中执行查询命令时会自动创建临时表
什么是临时表,及特点:
=======================================================================
FROM查询命令:
=======================================================================
WHERE命令:
-----循环遍历临时表中每一个数据行,遍历时每次只会取得一个数据行来判断当前数据行是否满足定位条件.在循环遍历结束后,WHERE命令将所有满足条件的数据行读取出来生成一个全新的临时表
-----WHERE命令在FROM命令只会执行,因此操作的是FROM生成的临时表1
循环遍历临时表的所有数据行,每次读取一个数据行判断是否满足定位条件
在循环结束后,WHERE命令将所有满足定位条件的数据行读取出来保存到一个全新的临时表
=======================================================================
GROUP BY 查询命令:
SELECT 字段名 , 聚合函数
FROM 表名
WHERE 数据行定位条件
GROUP BY 分组字段
作用:
首先根据[分组字段]内容对临时表数据进行分类.
然后将具有相同特征的数据行保存到一个临时表中.
七个查询命令中,只有GROUP BY在执行完毕后才有可能生成多个临时表.
=======================================================================
HAVING 查询命令
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行为特征:
SELECT 操作的是GROUP BY 提供的临时表,此时读取的字段内容应该能表示当前临时表所有数据共同特征,因此此时SELECT读取字段一般都是GROUP BY所采用分组字段
=======================================================================
ORDER BY 查询命令
对[SELECT生成临时表]中数据进行排序,将排序后的数据行组成一个全新的临时表展示出来;
=======================================================================
LIMIT 查询命令
执行优先级:
FROM --> WHERE --> GROUP BY --> HAVING --> SELECT --> ORDER BY --> LIMIT
书写规则 :
SELECT 字段名,聚合函数
FROM 表名
WHERE 对数据进行定位判断条件
GROUP BY 分组字段1 ,分组字段2….
HAVING 使用聚合函数统计当前临时表是否可以被删除
ORDER BY 根据SELECT提供的临时表字段进行排序
LIMIT 起始数据行位置,截取行数
作用:
对临时表数据进行截取 ,将截取到的数据保存到全新的临时表中
=======================================================================
多字段分组规则:
=======================================================================
七个查询命令的总结:
书写格式
SELECT 字段名,聚合函数
FROM 表名
WHERE 对数据进行定位判断条件
GROUP BY 分组字段1 ,分组字段2….
HAVING 使用聚合函数统计当前临时表是否可以被删除
ORDER BY 根据SELECT提供的临时表字段进行排序
LIMIT 起始数据行位置,截取行数
执行优先级:
FROM ---> WHERE ---> GROUP BY ---> HAVING ---> SELECT ---> ORDER BY ---> LIMIT