Mysql

  • 分组及其筛选
  • 排序
  • 数据的限制
  • 连接
  • 左连接


分组及其筛选

此处我直接在可视化工具下手动操作数据,直到显示如下效果

mysql 汇总表有什么优势 mysql分类汇总与排序_可视化

我们可以发现,表格中的(sex)字段,可以分为二类(二组),我们尝试一下将查询到的数据总数按照(sex)字段来分组

select count(*) from xiaoke group by sex;

mysql 汇总表有什么优势 mysql分类汇总与排序_mysql 汇总表有什么优势_02

我们可以粗略知道按照字段(sex)分类,可以得到总数为 3 和 4 的分组,但是具体来说并未归类,接下来我们将数据归类

select sex as "性别",count(*) from xiaoke group by sex;

mysql 汇总表有什么优势 mysql分类汇总与排序_数据库_03

如果我们想要知道每组的详细信息,那么我们用方法 group_concat(...)

select sex as "性别",count(*),group_concat(name) from xiaoke  group by sex;

mysql 汇总表有什么优势 mysql分类汇总与排序_数据分析_04

如果分组之后还想查看总人数,那么使用方法 with rollup

select sex,count(*) from xiaoke group by sex with rollup;

mysql 汇总表有什么优势 mysql分类汇总与排序_mysql 汇总表有什么优势_05

如果我们想查询组内的多种数据,也是使用方法 group_concat(...),但是我们会发现查询到的多个字段是拼接到一起的,并不利于查看

select sex as "性别",count(*),group_concat(name,age) from xiaoke  group by sex;

mysql 汇总表有什么优势 mysql分类汇总与排序_mysql 汇总表有什么优势_06

我们将其视为字符串的拼接原则,我们重新修改代码

select sex as "性别",count(*),group_concat(name,":",age) from xiaoke  group by sex;

mysql 汇总表有什么优势 mysql分类汇总与排序_数据库_07

分组之后我们依然可以筛选,使用方法 having... ,例如如下代码是以字段(sex)分组,当分组的平均年龄(小于 20)的时候显示数据

select sex,avg(age),group_concat(name) from xiaoke group by sex having avg(age)<20;

mysql 汇总表有什么优势 mysql分类汇总与排序_可视化_08

排序

语法:order by 字段 desc/asc

查询表中年龄在 18 到 26 男生,并按照(age)的大小进行排序(升序),默认为升序

select * from xiaoke where (age between 18 and 26) and sex="man" order by age asc;

mysql 汇总表有什么优势 mysql分类汇总与排序_可视化_09


查询表中年龄在 18 到 26 男生,并按照(age)的大小进行排序(降序)

select * from xiaoke where (age between 18 and 26) and sex="man" order by age desc;

mysql 汇总表有什么优势 mysql分类汇总与排序_数据分析_10


查询表中年龄在 18 到 20 女生,并按照(id)的大小进行排序(降序)

select * from xiaoke where (age between 18 and 20) and sex="woman" order by id desc;

mysql 汇总表有什么优势 mysql分类汇总与排序_mysql 汇总表有什么优势_11


增加表字段(height),使表格为如下所示

mysql 汇总表有什么优势 mysql分类汇总与排序_mysql 汇总表有什么优势_12

查询年龄在 18 - 25 之间的女性,年龄从高到低降序,当年龄相同时,按照身高从低到高升序

select sex,name,height,age from xiaoke where (age between 18 and 25) and sex="woman" order by age desc,height asc;

mysql 汇总表有什么优势 mysql分类汇总与排序_mysql 汇总表有什么优势_13

数据的限制

select * FROM xiaoke;
select * FROM xiaoke limit 2; -- 显示前 2 条数据
select * FROM xiaoke limit 5; -- 显示前 5 条数据
select * FROM xiaoke limit 2,3; -- 从索引项为 2 开始选 3 个数据

mysql 汇总表有什么优势 mysql分类汇总与排序_mysql_14

连接

xiaoke 表内容如下

mysql 汇总表有什么优势 mysql分类汇总与排序_数据分析_15


xiaosu 表如下

mysql 汇总表有什么优势 mysql分类汇总与排序_数据库_16

直接内连接数据集

select * from xiaoke inner join xiaosu;

指定范围连接

当表(xiaoke)的(id)和表(xiaosu)的(iid)相等的时候,显示所有数据

select * from xiaoke as k inner join xiaosu as s on k.id=s.iid;

mysql 汇总表有什么优势 mysql分类汇总与排序_mysql 汇总表有什么优势_17

当表(xiaoke)的(id)和表(xiaosu)的(iid)相等的时候,显示对应数据

select k.name,s.iname from xiaoke as k inner join xiaosu as s on k.id=s.iid;

mysql 汇总表有什么优势 mysql分类汇总与排序_mysql 汇总表有什么优势_18

当表(xiaoke)的(id)和表(xiaosu)的(iid)相等的时候,显示表(xiaoke)的所有数据,表(xiaosu)的指定数据

select k.*,s.iname from xiaoke as k inner join xiaosu as s on k.id=s.iid;

mysql 汇总表有什么优势 mysql分类汇总与排序_数据库_19

当表(xiaoke)的(id)和表(xiaosu)的(iid)相等的时候,以(id)降序显示数据

select *  from xiaoke  as k inner join xiaosu as s on k.id=s.iid order by k.id desc;

mysql 汇总表有什么优势 mysql分类汇总与排序_数据库_20

左连接

以左表为主 右表填充 null,特别注意:on 是必须有的

select *  from xiaoke  k left join xiaosu s on k.id=s.iid;

mysql 汇总表有什么优势 mysql分类汇总与排序_mysql 汇总表有什么优势_21

连接后筛选,当(iid)为(NULL),此处(having)改为(where)也是正确的

select *  from xiaoke  k left join xiaosu s on k.id=s.iid having iid is NULL;

mysql 汇总表有什么优势 mysql分类汇总与排序_可视化_22