03.SQL高级查询_分组:
1).需求:一条查询,查询出每种商品的最高价格
2).分组的命令:group by 分组字段
3).实现上例:
select category_id,max(price) from product group by category_id;
查询顺序:先分组,再聚合
4).注意事项:
分组查询的结果最多只能包含:分组列,聚合结果,不能包含其他字段。
5).练习1:
需求:查询每个生产日期的商品的数量是多少?
select proDate,count(*) from product group by proDate;
6).练习2:
有如下学员信息表:
编号 姓名 性别 年龄 科目
1 张三 男 22 JavaEE
2 李四 女 18 UI
3 王五 男 23 JavaEE
4 周六 女 21 JavaEE
5 赵四 女 17 IOS
需求1:每科目学员的最大年龄是多少?
select 科目,max(年龄) from 学员信息表 group by 科目
需求2: 每科目的总人数是多少?
select 科目,count(*) from 学员信息表 group by 科目
需求3: 一个查询显示出每科目的男同学和女同学分别有多少人?
1).先想出查询结果是什么样的:
科目 性别 人数
JavaEE 男 2
JavaEE 女 1
UI 男 0
UI 女 1
IOS 男 0
IOS 女 1
2).对多列进行分组:
select 科目,性别,count(*) from 学员信息表 group by 科目, 性别;//先按第一列分组,然后再按第二列进行分组
7).目前学习过的语句的编写顺序:
select 筛选字段 from 表名 where 条件 group by 分组字段 order by 排序字段;
执行顺序:
1).from
2).where
3).group by
4).如果有聚合函数,计算聚合的结果
5).select
6).order by
04.SQL高级查询_having子句:
1).需求:查询每种商品的最高价格,要求结果只显示最大价格大于5000元的结果,你可能会想这样写:
SELECT category_id,MAX(price) FROM product where max(price) > 5000 GROUP BY category_id ORDER BY MAX(price);
上述语句错误,因为where先执行,max()后执行,当where执行时,max()还没有结果,所以此语句错误。
2).由于where不能对聚合后的结果进行筛选,要对聚合后的结果进行筛选要使用:having语句
select category_id , max(price) from product group by category_id having max(price) > 5000 order by max(price);
05.SQL高级查询_分页查询:
1).分页查询语句:
select ... from ... limit m,n;
说明:
1).m : 表示从第几条记录开始取--记录的索引值(第一条记录的索引是0)。计算方式:(当前页- 1) * 每页显示条数
2).n : 表示取几条记录;
2).例如:查询product表,每页4条
#第一页数据:
select * from product limit 0,4;
select * from product limit (1 - 1) * 4 , 4
#第二页数据:
SELECT * FROM product LIMIT 4,4;
select * from product limit (2 - 1) * 4 , 4
#第三页数据:
SELECT * FROM product LIMIT 8,4;
select * from product limit (3 - 1) * 4 , 4
#第四页数据:
SELECT * FROM product LIMIT 12,4;
select * from product limit (4 - 1) * 4 , 4
3).注意:
1).m和n的值如果是负数、浮点数就会抛异常。
2).其它情况如果超出范围,不抛异常,只是无结果而已;
06.SQL的备份与恢复:
1).备份数据库的作用:
1).备份数据,防止数据库软件发生异常,导致数据丢失。
原文地址:http://blog.51cto.com/13797782/2134979