前集回顾

  上节我们学习了怎么登陆MySQL和修改账户密码,以及三种查询方式,这节继续我们的查询。先登录MySQL看看我们的数据库内容:

pageHelper mysql 分页序号 mysql分页分组排序_查询方式

pageHelper mysql 分页序号 mysql分页分组排序_查询方式_02


  也就是三部曲(进库,看库,看表):

mysql -u 用户 -p
输入密码
show databases
use 数据库
show tables

排序查询 order by 字段 DESC/ASC

  把语句”order by“挂到排序语句末尾就行了(要放到where子句之后),后面可以跟多个字段,结果就会优先按照第一个字段排序,第一个字段重复的按后面的字段再排。

  参数DESC表示降序,ASC(可省略)表示升序。

pageHelper mysql 分页序号 mysql分页分组排序_IT_03

  这里需要注意的是看上图的查询命令,上节也提到一个完整的命令需要“;”来结尾,可以利用这一点,把不同的子句输入在不同的行来避免看混淆。但是缺点也是有的,就是想重复命令的时候按向上箭头也是逐行出现而不是完整一行。

分页查询 limit <m> offset<n>

  limit后面的参数表明页显示的记录数量,offset则是此页从第几条记录开始显示(注意记录时从0开始计数的)。

pageHelper mysql 分页序号 mysql分页分组排序_学习笔记_04

  注意:

  • limit表示的时此页最大显示的记录数量,如果不够,有多少显示多少。如果查询条件得到的记录没有,则显示空数据集。
  • offset可不写,默认为0。
  • 在MySQL中,limit 15 offset 30还可以简写成limit 30, 15。
  • 随着offset后面的值越大,查询效率越低。

  思考:分页查询之前怎么计算共有几页?

  select count(*) from students; 返回该表的记录总数量,然后除以limit指定的每页显示的数量,有余数结果加一就是页数。

  注意,可能会想到利用自增主键的逆序排列看到主键最大值得到总共的记录数量。这是行不通的,因为自增主键不一定连续。

pageHelper mysql 分页序号 mysql分页分组排序_数据库_05


聚合查询 count (*)

  这是学数据库以来第一次碰到这种略复杂的内容,不慌,我们慢慢梳理。聚合查询主要是利用一些聚合函数对表的特定内容进行计算查询:

聚合函数

功能

count

计算某条件下共有多少条记录

avg

计算某一列的平均值,该列必须为数值类型

max

计算某一列的最大值

sum

计算某一列的合计值,该列必须为数值类型

min

计算某一列的最小值

  在使用聚合函数的同时可以用where语句来限制查询计算的条件,如查询students表格中共有多少男生,并设定字段暂用名:

pageHelper mysql 分页序号 mysql分页分组排序_查询方式_06

  注意where语句中条件用到字符串类型的数据时,要用“ ”或者‘ ’括起来。如果聚合查询的WHERE条件没有匹配到任何行,count()会返回0,而sum()、avg()、max()和min()会返回NULL。这里也终于完全解决了上一个查询方式留下的思考题:

SELECT CEILING(COUNT(*) / 3) FROM students;分组聚合 group by:根据某字段进行分组再聚合,相同字段的聚合结果分别显示。如,计算students表中不同班级的人数。

pageHelper mysql 分页序号 mysql分页分组排序_Mysql_07

  注意聚合查询的列中,只能放入分组的列不然也没什么意义。比如在上面的查询中,加入name这个字段,本来是按照班级号计算人数,每个班级可能都有不止一个人,没法进行name的显示,就必然会报错:

pageHelper mysql 分页序号 mysql分页分组排序_IT_08

  聚合查询里面要会聚合函数的使用和理解分组聚合,用两道例子看看有没有掌握怎么使用:

  • 使用一条select语句查询每个班级的平均分:
      首先是确定要查询的是各个班级的,所以肯定是要分组的。而且要平均分,就要计算,要聚合函数avg参与:
  • 请使用一条SELECT查询查出每个班级男生和女生的平均分:
      重点在于要在分组中再分组,那就在"group by"语句中根据分组顺序依次"class_id, gender",注意别忘了逗号。

学习感悟:本节学习了数据查询的几种较高级的方式,后面还有两种查询下节再学。总体觉得对数据的查询就是对数据使用各种条件筛选,然后计算处理进行一定顺序和格式进行显示。这节之后初步感受到了这种开源数据库的高效性,不同于excel的所见即所得,MySQL的使用是相对比较陌生,不过用起来还是会对后面的工作要有好处,比只会excel要更有竞争力一些。