mysql 高级查询
高级查询
1.in的用法 select * from member where id in(1,2,3);
2.模糊查询like的用法
3.统计count()的用法
4.去重distinct的用法
5.between的用法
6.分组group by的用法
7.mysql分页
-- 1:掌握in的用法 -- 在。。。里面
-- 字段 in(数据集)
-- 查询用户id为1,或者为2,或者为3的用户
-- select * from member where id in(1,2,3)
-- not in: 不在...里面
-- select * from member where id not in(1,2,3);
-- 2:掌握模糊查询like的用法 关键字查询
-- 查询姓小的会员
-- select * from member where RegName like '小'; -- 没有%表示完全匹配。名字为小的用户
-- 姓小:表示第一个字符是小,后面可以是任意字符
-- 模糊匹配 %:表示可以是任意字符,也可以是空字符串
-- select * from member where RegName like '小%';姓为小,后面可以是任何字符
-- select * from member where RegName like '%小';必须以小结尾,前面可以是任意字符
--
-- select * from member where RegName like '%小%'; 查找包含小这个关键字的记录
-- 3:掌握统计count()的用法
-- 统计行数,纵向统计 count 3种写法
(1)-- select count(*) from member; 42条记录 表示有42行 * 表示一条记录所有字段
(2)-- select count(id) from member; -- 推荐使用 统计一个字段
eg:select count(RegName) from member;
(3) select count(1) from member;大力推荐使用
select 1 第一列,t.*from member t; t.*代表所有字段 1是常量的一个列
select 1,'零檬',t.* from member t; 增加常量列用逗号隔开
select 1,id,regname from member; 1表示 第一列全部为1,是一个常量,手动加了一个常量列
、
select count
-- select count("柠檬班") from member;
这样写的意义: 加入要j加一列type为1 为普通用户
select '普通用户’,type from member where type=1;
select if 自己查找
-- 4:掌握去重distinct的用法
-- 需求:查询所有的有投资的用户的id
-- select distinct MemberID from invest;
-- distinct 字段1,字段2,字段3: 当两行记录字段1,字段2,字段3一一相等的时候,表示重复
-- 字段1,字段2,字段3
-- A B C
-- A B D
-- A B C
当2行记录多个字段全部相等时是重复,这样的记录会去掉
-- 5:掌握between...and的用法 -- 在。。。之间 between 小值 and 大值
-- 需求:查询出用户可用余额在10000(包括)到30000(包括)之间的用户信息
-- select * from member where LeaveAmount between 10000 and 30000;
-- select * from member where LeaveAmount between 30000 and 10000; -- 没有记录,顺序要从小到大
-- 6:掌握分组group by的用法 --- 通过...分组
思维方式:-- 统计男生和女生的平均年龄
-- 先把同学们根据性别分成男、女的两组,分完组,分别计算男女两组的平均年龄
-- 统计每个投资用户的平均的投资金额 invest表
-- 按哪个字段分组的意思是哪个字段相同说明他们是同一组
-- 只有memberid相同的记录表示是同一个用户的投资记录--》group by memberId
-- 分组完毕:可以去计算、统计组内的信息
-- select MemberID,avg(Amount) from invest group by MemberID;
-- 统计每个投资用户的平均投资金额、最大投资额、最小投资额、总投资额、投资次数
/*
select MemberID,avg(Amount),max(Amount),min(Amount),sum(Amount), count(id) 投资次数
from invest group by MemberID;
*/
-- group by 字段一,字段二,字段三:只有当字段一字段二字段三完全相同是,才算是一组
-- 字段1,字段2,字段3
-- A B C 和第三条记录为一组
-- A B D
-- A B C
-- 大学 年级 班级
-- 清华 大三 10086 1
-- 北大 大三 10086 2
-- 清华 大三 10086 3
-- 7:掌握MySQL分页
-- 分页1:limit m,n :m表示索引(记录的索引) n:表示一页多少记录
-- 一页10条,你给我返回第一页
-- select * from member limit 0,10; -- 第一页
-- select * from member limit 10,10; -- 第三页
-- select * from member limit 20,10 -- 第三页
-- 分页二:
-- select * from member limit m offset n; -- m每页多少条,n偏移量(索引)
-- 一页10条,你给我返回第一页单表查询多表查询.note
-- select * from member limit 10 offset 0;
-- select * from member limit 10,10; -- 第一页 、
-- 分页三:top语法:取最前面的10
-- select * from member limit 10;
-- 查询出可用余额最多的前10个用户
-- select * from member order by LeaveAmount desc limit 10;
-- 查询出最新的一个会员记录
-- select * from member order by id desc limit 1;
-- 子查询
-- select * from member where id=(select max(id) from member);
-- 8:掌握MySQL常用函数
数值相关函数
求字段A的最小值:min(字段A)
求字段A的最大值:max(字段A)
求字段A的平均值:avg(字段A)
求字段A的和:sum(字段A)
日期函数
获取系统当前日期时间:sysdate( )
获取系统当前日期:curdate()
获取系统当前时间:curtime()
获取系统给定日期的年份:year(date) select year(sysdate());
获取给定日期的月份 month(date)
为指定日期增加一个时间间隔的函数 DATE_ADD(date,INTERVAL expr unit)
slect DATE_ADD(SYSDATE(),INTERVAL 1DAY);
在系统时间基础上加上一天
字符串函数
字符串拼接函数:contact(字段A ,字段B,字段 C)
select contact (;HELLO','','WORLD');
字符串截取函数:SUBSTR(字段A,截取开始的位置position,截取字符个数)
slect regname,mobilephone from member
select.substr(regname,1,l2);从最开始截取2个字符串
获取字符串长度的函数:length(字段A)
2.投资成功不能算是有效投资,有可能借款失败 invest表
3.明天 data_add() 应汇款表示还未回款 status 0,完全没有还1部分已还 回本金或利息
4.待还本金 应回款回的本金 整个平台 所有状态为0,1状态的 status in(0,1)回款计划的本金求和
5.count(1) status 0,1 关联invest loanid确定项目
6再爆总额 repayment invest表关联查询,,memberid member关联上 repaymenT -inbest-member
7.分组,排序f