python学习笔记-数据库05_高级查询
排序
排序查询语法:
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;