一,语法执行顺序
语法顺序的执行是和 MySQL 的 select 语句执行顺序相关的,select 执行先后顺序如下:
from 阶段
where 阶段
group 阶段
having 阶段
select 阶段
order by 阶段
limit 阶段
聚合函数类型:sum(),avg(),max(),min(), count()
在不使用group by 情况下,select后跟的全是字段名 或 全是聚合列(如sum(),min()...),不能" select 字段名,sum() "混搭。
在使用group by 情况下,select后可以跟“字段名,聚合列”,但是其中的字段名必须是group by 中所列的字段名,没列的字段名也是不能使用的。聚合列里的字段名就可以不是group by 包含的。
sum、avg、max、min函数必须指定字段进行聚合运算,无法使用通配符,同时这些指定字段名的聚合函数都会忽略空值行。
count(字段名)计算字段下的总行数,但是计算时将忽略空值的行;count(*)计算表中的总行数,不管某列是否有数值或者为空值;因此,count(*)适合计算表格行数,count(字段名)计算字段中非空的行数。
group by 有数据去重功能,类似于distinct。但有区别,distinct是返回不同的行,group by 是先对特定的字段中相同的值分为一个区,然后再对字段去重分组。
group by 子句有多个字段时,依据写的字段顺序依次对数据分区,因此group by 字段1,字段2与group by 字段2,字段1不一样。
二、常用函数使用
二、having
只有使用了group by 子句后才能使用having子句,having子句不能脱离group by 子句单独使用,因为having子句本质上是对group by 分组的筛选。
having子句中只能使用聚合函数和group by作为分组筛选的字段。
having的表达式和where的表达式基本相同,但是having的表达式中可以使用聚合数,where的表达式中不可以,因为where是对原表的行数据进行筛选,having是对group by 分组后的数据筛选。
对行数据筛选用where,对聚合函数的数据筛选用having。
三、group by 和 having
1、满足“SELECT子句中的列名必须为分组列或列函数”,因为SELECT有group by中包含的列
2、having必须和group by一起用,且在group by后面
3、group by、having、order by的使用顺序:group by 、having、order by
4、having是在分好组后找出特定的分组,通常是以筛选聚合函数的结果,如sum(a) > 100等,使用了having必须使用group by,但是使用group by 不一定使用having。
5、分组函数常用到的聚合函数:
MIN 最小值
MAX 最大值
SUM 求和
AVG 求平均
COUNT 计数
不允许使用双重聚合函数,所以在对分组进行筛选的时候,可以用order by 排序,然后用limit也可以找到极值。
四:MySQL ORDER BY:对查询结果排序
通过条件查询语句可以查询到符合用户需求的数据,但是查询到的数据一般都是按照数据最初被添加到表中的顺序来显示。为了使查询结果的顺序满足用户的要求,MySQL 提供了 ORDER BY 关键字来对查询结果进行排序。
在实际应用中经常需要对查询结果进行排序,比如,在网上购物时,可以将商品按照价格进行排序;在医院的挂号系统中,可以按照挂号的先后顺序进行排序等。
ORDER BY 关键字主要用来将查询结果中的数据按照一定的顺序进行排序。其语法格式如下:
ORDER BY <字段名> [ASC|DESC]
语法说明如下。
字段名:表示需要排序的字段名称,多个字段时用逗号隔开。
ASC|DESC:ASC表示字段按升序排序;DESC表示字段按降序排序。其中ASC为默认值。
使用 ORDER BY 关键字应该注意以下几个方面:
ORDER BY 关键字后可以跟子查询(关于子查询后面教程会详细讲解,这里了解即可)。
当排序的字段中存在空值时,ORDER BY 会将该空值作为最小值来对待。
ORDER BY 指定多个字段进行排序时,MySQL 会按照字段的顺序从左到右依次进行排序。
五、limit用法
LIMIT offset,length;
offset:起始行数,从 0 开始计数,如果省略,默认就是 0
length: 返回的行数
查询学生表中数据,从第 3 条开始显示,显示 6 条。
select * from student3 limit 2,6
分页:比如我们登录京东,淘宝,返回的商品
三、常见部分函数
- 数学函数&字符串函数
- 日期时间函数
- 数据类型转换函数