3 组合排序
什么是组合排序?
同时对多个字段进行排序,如果第 1 个字段相等,则按第 2 个字段排序,依次类推
组合排序的语法:
SELECT 字段名 FROM 表名 WHERE 字段=值 ORDER BY 字段名 1 [ASC|DESC], 字段名 2 [ASC|DESC];
– 查询所有数据,在年龄降序排序的基础上,如果年龄相同再以数学成绩升序排序
select * from student order by age desc, math asc;
3.2 聚合函数
之前我们做的查询都是横向查询,它们都是根据条件一行一行的进行判断,而使用聚合函数查询是纵向查询,
它是对一列的值进行计算,然后返回一个结果值。聚合函数会忽略空值 NULL
3.2.1 五个聚合函数
SQL 中的聚合函数 作用
max(列名) 求这一列的最大值
min(列名) 求这一列的最小值
avg(列名) 求这一列的平均值
count(列名) 统计这一列有多少条记录
sum(列名) 对这一列求总和
3.2.2
我们发现对于 NULL 的记录不会统计,建议如果统计个数则不要使用有可能为 null 的列,但如果需要把 NULL
也统计进去呢?
IFNULL(列名,默认值) 如果列名不为空,返回这列的值。如果为 NULL,则返回默认值。
– 查询 id 字段,如果为 null,则使用 0 代替
select ifnull(id,0) from student;
我们可以利用 IFNULL()函数,如果记录为 NULL,给个默认值,这样统计的数据就不会遗漏
select count(ifnull(id,0)) from student;
**
3.3 分组
分组查询是指使用 GROUP BY 语句对查询信息进行分组,相同数据作为一组
SELECT 字段 1,字段 2… FROM 表名 GROUP BY 分组字段 [HAVING 条件];
GROUP BY 将分组字段结果中相同内容作为一组,并且返回每组的第一条数据,所以单独分组没什么用处。
分组的目的就是为了统计,一般分组会跟聚合函数一起使用
– 按性别进行分组,求男生和女生数学的平均分
select sex, avg(math) from student3 group by sex;

  • 注意:当我们使用某个字段分组,在查询的时候也需要将这个字段查询出来,否则看不到数据属于哪组的

查询男女各多少人

  1. 查询所有数据,按性别分组。
  2. 统计每组人数
    select sex, count(*) from student3 group by sex;


     查询年龄大于 25 岁的人,按性别分组,统计每组的人数
  3. 先过滤掉年龄小于 25 岁的人。
  4. 再分组。
  5. 最后统计每组的人数
    select sex, count() from student3 where age > 25 group by sex ;

    mysql 按顺序拼接列 mysql排列组合_字段


    查询年龄大于 25 岁的人,按性别分组,统计每组的人数,并只显示性别人数大于 2 的数据
    以下代码是否正确?
    SELECT sex, COUNT(
    ) FROM student3 WHERE age > 25 GROUP BY sex WHERE COUNT() >2;
     正确写法:
    – 对分组查询的结果再进行过滤
    SELECT sex, COUNT(
    ) FROM student3 WHERE age > 25 GROUP BY sex having COUNT(*) >2;
    只有分组后人数大于 2 的这组数据显示出来

    3.3.1 having 与 where 的区别
    子名 作用
    where 子句 1) 对查询结果进行分组前,将不符合 where 条件的行去掉,即在分组之前过滤数据,即先过滤
    再分组。
  6. where 后面不可以使用聚合函数
    having 子句 1) having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,即先分组再过滤。
  7. having 后面可以使用聚合函数
    3.3.2 面试题:有如下订单表
    Orders 表数据如下所示,执行如下 SQL 语句,运行结果是?

    select product,sum(price)
    from orders group by product where sum(price) > 30;
    运行有误,group by 后面不能出现 where,使用 having
    3.4 limit 语句
    3.4.1 准备数据:
    INSERT INTO student3(id,NAME,age,sex,address,math,english) VALUES
    (9,‘唐僧’,25,‘男’,‘长安’,87,78),
    (10,‘孙悟空’,18,‘男’,‘花果山’,100,66),
    (11,‘猪八戒’,22,‘男’,‘高老庄’,58,78),
    (12,‘沙僧’,50,‘男’,‘流沙河’,77,88),
    (13,‘白骨精’,22,‘女’,‘白虎岭’,66,66),
    (14,‘蜘蛛精’,23,‘女’,‘盘丝洞’,88,88);
    3.4.2 limit 的作用:
    LIMIT 是限制的意思,所以 LIMIT 的作用就是限制查询记录的条数。
    SELECT *|字段列表 [as 别名] FROM 表名 [WHERE 子句] [GROUP BY 子句][HAVING 子句][ORDER BY 子
    句][LIMIT 子句];
    3.4.3 LIMIT 语法格式:
    LIMIT offset,length;
    offset:起始行数,从 0 开始计数,如果省略,默认就是 0
    length: 返回的行数
    – 查询学生表中数据,从第 3 条开始显示,显示 6 条。
    select * from student3 limit 2,6;

    3.4.4 LIMIT 的使用场景:
    分页:比如我们登录京东,淘宝,返回的商品信息可能有几万条,不是一次全部显示出来。是一页显示固定的
    条数。 假设我们每页显示 5 条记录的方式来分页。
     SQL 语句如下:

    如果第一个参数是 0 可以省略写
    select * from student3 limit 5;
    最后如果不够 5 条,有多少显示多少
    select * from student3 limit 10,5;

第4节 数据库备份和还原
4.1 备份的应用场景
在服务器进行数据传输、数据存储和数据交换,就有可能产生数据故障。比如发生意外停机或存储介质损坏。
这时,如果没有采取数据备份和数据恢复手段与措施,就会导致数据的丢失,造成的损失是无法弥补与估量的。
4.2 备份与还原的语句
4.2.1 备份格式: DOS 下,未登录的时候。这是一个可执行文件 exe,在 bin 文件夹
mysqldump -u 用户名 -p 密码 数据库 > 文件的路径
4.2.2 还原格式:mysql 中的命令,需要登录后才可以操作
USE 数据库;
SOURCE 导入文件的路径;
4.2.3 备份操作:
– 备份 day21 数据库中的数据到 d:\day21.sql 文件中
mysqldump -uroot -proot day21 > d:/day21.sql
 导出结果:数据库中的所有表和数据都会导出成 SQL 语句
4.2.4 还原操作
 还原 day21 数据库中的数据,注意:还原的时候需要先登录 MySQL,并选中对应的数据库。

  1. 删除 day21 数据库中的所有表
  2. 登录 MySQL
  3. 选中数据库
  4. 使用 SOURCE 命令还原数据
  5. 查看还原结果
    use day21;
    source d:/day21.sql;
    4.3 图形化界面备份与还原
    4.3.1 备份数据库中的数据
  6. 选中数据库,右键 ”备份/导出”
  7. 指定导出路径,保存成.sql 文件即可。


    4.3.2 还原数据库中的数据
  8. 删除数据库
  9. 数据库列表区域右键“执行 SQL 脚本”, 指定要执行的 SQL 文件,执行即可