语法顺序:
SELECT [ALL]|[DISTINCT] 字段名
FROM 数据源
WHERE 筛选条件
GROUP BY 字段…
HAVING 分组数据的筛选条件或者聚合函数
ORDER BY 字段
LIMIT
数据源
FROM 关键字后边跟的数据源可以是 实体表或临时表。
实体表
单张表或者多张表,多张表如果不指定匹配规则,会出现笛卡儿积现象
动态数据
FROM 后面跟的数据不止是一个实体表,而是一个[可以是从表中查询出来的]二维结果表(子查询)
where 子句
用来从数据表获取数据的时候,然后进行条件筛选(满足筛选条件的从硬盘加载到内存),where之后的所有操作都是内存操作
group by 子句
表示分组的含义,根据指定的字段,将数据进行分组(分组的目标是为了统计)
分组统计
group by 是为了分组后数据统计的,如果只是想看数据显示,那么 group by 没什么含义。通常是搭配统计函数使用(聚合函数)。常用聚合函数有 avg,sum,max,min 等。
- count(value):统计每组中的数量,如果 value 是字段,那么不统计为 null 的值,如果 value 为 * 代表统计记录条数!
分组排序
在MySQL中,分组默认有排序的功能,按照分组字段进行排序,默认是升序
基本语法:group by 字段 [asc|desc],类似于order by
回溯统计
当分组进行多分组之后,往上统计的过程中,需要进行层层上报,将这种层层上报的过程称之为回溯统计,每一次分组向上统计的额过程都会产生一次新的统计数据,而且当前数据对应的分组字段为null。
基本语法:group by 字段 [asc|desc] with rollup;
having 子句
having 也是用来进行数据条件筛选的。但是和 where 有着本质的不同。
- having 针对分组数据 进行统计筛选,where 做不到【where 不能使用聚合函数】。
- having 在 group by 分组之后,可以使用聚合函数或者字段别名(这样理解比较好记,where 是从物理数据文件上加载数据,物理数据文件上只存的有字段和数据)
order by 子句
根据校对规则对数据进行排序。
基本语法:order by 字段 [asc|desc];
- asc 升序,默认的
limit 子句
主要是用来限制记录数量
记录数限制
基本语法:limit number
分页
利用 limit 来限制获取指定区间的数据
基本语法:limit offset,length;
- offset:从哪里开始。
- length:具体的获取多少条记录。
mysql 中 limit 0,2;
表示,从第一条记录开始,只要前两条记录。