还书功能
使用mybatis完成以下功能
1.还书
①登录 UserMapper
用户名 + 密码 :select uid,username,password from users where username = ? and passwod = ?
②还书
书名 BookMapper RecordMapper
select bid,name,current,total from books where name = ?
如果没有搜到,退出
select rid,uid,bid,borrowedAt,returnedAt from records where uid = ? and bid = ? and returnAt is null;
如果没有搜到,退出
update books set current = current + 1 where bid = ?
update records set returnedAt = ? where rid = ?;
2.查询自己的借阅记录功能
①先登录
②查询借阅记录
先在records表中查询是否有记录,然后再根据returnAt是否为null做区分
聚合查询
聚合查询都是不来自表的直接结果,而是将查询记录进行“合计”之后的结果
select 聚合函数(....)from 表 where 条件
先通过where条件进行记录的筛选,然后通过聚合函数进行聚合
聚合函数:sum(...)求和统计 avg(...)平均统计 max(...)最大值统计 min(...)最小值统计
只能聚合数值类型的字段
分组聚合:先通过where进行记录筛选,然后根据分组凭证,将记录分组,最后针对分组,进行各自的聚合
例子:
select count(*)from citizens
where birthday between “1990” and “1999”
group by gender;
先找出1990-1999年的人,再根据性别分组,再分别进行聚合,统计出人数
注意事项:
进行聚合查询的时候,select 后只能跟聚合函数和分组凭证
并且可以进行多次分组聚合
比如select gender,year,count(*)
from citizens
group by gender,year
分组之后还能使用having再进行依次结果的过滤
select ...from...where group by ...having...
where 和 having 都是对行进行筛选
但where 是发生在聚合之前,having发生在聚合之后
① where 进行记录的筛选 ② 进行group by 分组③ 进行聚合 ④ having 再次过滤
总结:
1基本思路:对符合条件的记录(字段)按照指定规则汇总一个或几个结果
2执行顺序
① where 进行记录的过滤 ② group 进行结果分组 ③ 分别对各组按照聚合函数聚合
④ 使用having进行聚合后的结果过滤 ⑤order进行排序 ⑥ limit/offset 进行区间筛选
3聚合函数
count/sum/avg/max/min
null不参与聚合
4select后边只能跟两类,聚合函数或分组的凭证
5可以进行多次分组,先后顺序不影响
6注意对比where 和having的区别
例题:
确定已售出产品项BR01的总数
select sum(quantity) items_ordered from OrderItems where prod_id = "BR01";
确定Products表中价格不超过10的产品
select max(prod_price)max_price from Products where prod_price <=10;