mysql进阶查询2
sql语句除了使用where是最常用的之外,为了满足查询需求,还有其他的一些需要我们掌握的内容,话不多说,上干货!
聚合函数
sql给我们提供了一些函数,帮助我们更好的查询,他们通常都是sql自己计算的一些值,返回给我们查询结果。
常见的五个聚合函数:avg平均值,count总数,max最大值,min最小值,sum求和
注意:聚合函数可以起别名,用as 作为关键字,通常可以省略关键字而直接起别名。
需求:查询所有人的平均年龄:
sql语句:
select avg(age) from stu
as作为别名
select avg(age) as stuSvgAge from stu
select avg(age) stuSvgAge from stu
需求:查询年龄最大的人是多少岁
sql语句:
select max(age) from stu
sql的排序
关键字:order by
排序虽然可以根据字符串和时间进行排序,但是使用更多的字段时数值类型的字段。
asc是正序,也是默认值,如果不写,是正序。 desc是倒序
select * from stu order by age desc
如果有where语句和排序。排序在where后面。
需求:查询所有男生的信息,并按照id倒序
select * from stu where sex ='男' order by id desc
sql的分页
就是返回多少条给查询结果,关键字是limit,后面可以是一个数字,表示从0开始,也可以是两个数字,就是m开始取n条
从10开始,取5条
select * from stu limit 10,5
注意,如果where,order by 和limit同时使用的话,顺序也where,border by limit
sql的去重
关键字是distinct,写在要去重的字段前面
比如,去重相同的年龄
select distinct age from stu
sql的分组
关键字是group by
分组通常是和聚合函数一起使用的。按照分组的字段规则去分好以后返回作为查询的结果。
需要注意的是,如果使用分组查询,select后面只能加被分组的字段和聚合函数,其余字段是没有意义的。
需求:查询男生和女生各自的平均年龄。
分析:需要分组(男,女)则分组的字段为sex,需要聚合函数avg计算平均年龄
select sex avg(age) from stu group by sex
查询的条件用where关键字,分组的也可以再显示条件,关键字是having
需求:按性别分组,找出平均年龄大于34岁的那一组。
分析,首先是分两组,男,女,然后这两组里根据他们的平均年龄去判断,返回大于34的那一组给查询结果。
select sex avg(age) from stu group by sex having avg(age) > 34
顺序:where -group -order -limit