赞
踩
数据库优化 学习笔记
1.1、group by
select ...(显示的字段) from 表名 group by ...(用来进行分组的字段); select name from students group by gender; -- 只显示组内第一条数据的 name
select gender from students group by gender;
select gender, high from user group by usergroupid, high; -- 性别和身高都相同的形成一组
-- 计算男生和女生中的人数
select count(*) from students group by gender;
select gender as 性别,count(*) from students group by gender;
-- 男女同学最大年龄
select gender as 性别,max(age) from students group by gender;
1.2、group_concat() 查看组内成员的属性
select 字段名 , group_concat(字段1, [字段2...]) from 表名 group by 字段名 -- 查询同种性别中的姓名
select gender as 性别,group_concat(name) from students group by gender;
-- 查询同种性别中的姓名 和 年龄
select gender as 性别,group_concat(name,age) from students group by gender;
group_concat(name, age) 显示出来的就是一个拼接的字符串,所以输出结果也可以拼接的稍稍美观一点 -- 查询同种性别中的姓名 和 年龄
select gender as 性别,group_concat(' 姓名:',name,' 年龄:',age) from students group by gender;
1.3、having 分组之后的筛选
-- 查询总记录数大于 2 的组
select gender,count(*) from students group by gender having count(*)>2;
-- 查询总记录数大于 2 的组及其成员
select gender,count(*),group_concat(name) from students group by gender having count(*)>2;
-- 查询组内成员平均年龄超过18岁的组,及其成员
select gender,group_concat(name),avg(age) from students group by gender having avg(age)
2.1、order by 字段
asc: 从小到大排列,即升序,默认desc: 从大到小排序,即降序 -- 查询年龄在18到26岁之间的男同学,按照年龄从小到到排序
select * from students where (age between 18 and 26) and gender=1;
select * from students where (age between 18 and 26) and gender=1 order by age;
select * from students where (age between 18 and 26) and gender=1 order by age asc;
-- 查询年龄在18到26岁之间的女同学,身高从高到矮排序
select * from students where (age between 18 and 26) and gender=2 order by id desc;
2.2、order by 多个字段
order by 字段1, 字段2 -- 查询年龄在18到28岁之间的男性,年龄从高到矮排序, 如果身高相同的情况下按照年龄从小到大排序
select * from students where (age between 18 and 28) and gender=1 order by age desc,hiht asc;
3.1、limit 限制查询出来的数据个数
select * from 表名 limit start,countstart: 每页的起始的位置(从0开始)count: 每页显示的记录个数 -- 若不指定 start , 则默认是 0
select * from students limit 2;
-- 查询前5个数据
select * from students limit 5;
-- 查询id 6-10(包含)的数据
select * from students limit 5,5;
3.2、制作分页
-- 每页显示2个,第1个页面
select * from students limit 0,2;
-- 每页显示2个,第2个页面
select * from students limit 2,2;
-- 每页显示2个,第3个页面
select * from students limit 4,2;
-- 每页显示2个,第4个页面
select * from students limit 6,2;
limit (第N页-1)*每页显示的个数,每页显示的个数 -- 如查看第三页, 每页显示的个数 2
select * from students limit 6,2;
-- 注意, 不能写成下面这样, mysql 不回给你计算式子
select * from students limit (3-1)*2, 2;
select gender from students limit 0,2 group by gender; -- 报错
select gender from students group by gender limit 0,2; -- ok
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。