python学习笔记-数据库05_高级查询

2020-11-10  本文已影响0人  MR_詹

排序

排序查询语法:
select * from 表名 order by 列1 asc | desc [,列2 asc | desc ,...];

语法说明:
先按照列1进行排序,如果列1的值相同,则按照列2排序,以此类推
asc从小到大排序,即升序(是默认值)
desc从大道小排序,即降序

// 查询为删除男生信息,按学号降序
select * from students where is_del = 0 and gender = '男' order by id desc;

// 显示所有学生的信息,先按照年龄从大到小排序,当年龄相同时,按照身高从高到矮排序
select * from students order by age desc,height desc;

分页

分页语法:
select * from 表名 limit start,count;

语法说明:
limit 是分页查询关键字
start 表示开始的索引, 默认是0
count 表示查询条数

// 查询前3行男生信息
select * from students where gender = ’男‘ limit 0, 3;
简写:
select * from students where gengder = '男' limit 3;

/// 查询学生表,后去第n页数据的SQL 语句
select * from students limit (n-1)*count , count;

聚合函数

聚合函数又叫组函数,通常是对表中的数据进行统计和计算,一般结合分组(group by)来使用,用于统计和计算分组数据。
常用的聚合函数:
count(col): 表示求指定列的总行数
max(col):表示求指定列的最大值
min(col):表示求指定列的最小值
sum(col):表示求指定列的和
avg(col):表示求指定列的平均值

// 查询学生的个数
select count(height) from students;
注意点:聚合函数不会对空值进行统计
一般如果要指定列名,那么就是主键字段
select count(id) from students;
通用的写法(因为主键不一定是id)
select count(*) from students;

// 查询女生的编号最大值
select max(id) from students where gender = ‘女’;

// 查询未删除的学生最小编号
select min(id) from students where is_del = 0;

// 查询男生的总身高
select sum(height) from student where gender = ‘男’;

// 求男生的平均身高
// 此处是对身高是null的不会加入统计的范围内
select avg(height) from students where gender = ‘男‘;

// 此写法会对身高height为空null的时候,设置默认为0,并加入统计的范围内
select avg(ifnull(height,0)) from students where gender = ’男‘;

// 这是另外一种写法
select sum(height) / count(*) from students where gender = ’男‘;

分组

分组查询就是将查询结果按照指定字段进行分组,字段中数据相等的分为一组
语法如下:
group by 列名 [having 条件表达式] [with rollup]
列名:是指按照指定字段的值进行分组
having 条件表达式:用来过滤分组后的数据
with rollup: 在所有记录的最后加上一条记录,显示select 查询是聚会函数的统计和计算结果
group by : 可用于单个字段分组,也可以用于多个字段分组

// 查询性别的种类
select gender from students group by gender;

// 注意:如果指定了分组字段,那么查询的时候只能使用指定分组字段
// 比如:如果要将分组的字段gender 添加一个name,
// 那么select 相应也要添加一个name,如下
select gender,name from students group by gender , name;

// 根据gender字段进行分组,查询每个分组的姓名信息
select gender,gruop_concat(name) from students group by gender;
group_concat:统一每个分组指定字段的信息集合,信息之间使用逗号进行分割

// 统计不同性别的平均年龄
select gender,avg(age) from students group by gender;

// 统计不同性别的人数
select gender,count(*) from student group by gender;

根据gender字段进行分组,统计分组条数大于2的
// 对分组数据过滤不能使用where,只能使用 having语句
select gender,count(*) from students group by gender having count(*) > 2;

// 根据gender字段进行分组,汇总总人数
select gender , count(*) from students group by gender with rollup;

// 根据gender字段进行分组,汇总所有人的年龄
select gender,group_concat(age) from students group sender with rollup;

上一篇下一篇

猜你喜欢

热点阅读