4.数据库表的高级查询
4.1 in
使用场景:查询时,条件字段的值存在某个数据集中
数据集:可以是具体的某几个值,也可以是通过一个子查询得到的数据集 |
select ... from 表名 where 条件字段 in (数据集); |
比如: 从member表中查询用户id为1001,1002,1003的用户信息
select * from member where in(1001,1002,1003); |
select ... from 表名 where 条件字段 not in (数据集);
表示要查询的字段不存在这个数据集中 |
4.2 模糊查询 like
使用场景:查询的时候,条件字段的值不完整的情况下 |
|
% 匹配任意长度的字符串,%所在的位置不同代表的意思不同 |
|
select ... from 表名 where 条件字段 like '%XX'; | 条件字段以任意字符串开头 以XX结尾 |
select ... from 表名 where 条件字段 like 'XX%'; | 条件字段以XX开头 以任意字符串结尾 |
select ... from 表名 where 条件字段 like '%XX%'; | 条件字段包含XX |
比如 查询用户表中手机号以556结尾的用户信息
select * from member where mobilephone like '%556'; |
|
查询用户表中手机号后三位是556的用户信息
select * from member where mobilephone like '_________556'; | 占位符(下划线)_ 11位的手机号,输入9次下划线 |
4.3 分组 group by
使用场景: 按照某一个或多个字段进行分组,必须配合“聚合函数”使用,使用时至少需要一个分组字段。 |
select 查询字段,聚合函数 from <查询涉及到的表> group by 分组字段 having 过滤条件; |
聚合函数:对一组值执行计算并返回单一的值的函数。 sum()、count()、avg()、min()、max() |
having 过滤条件: 在分组结果的基础上再进行过滤,必须用having 过滤条件 |
Select *,max(amount) from invest group by loanid having max(amount)>20000.00 |
4.4 between
使用场景: 条件字段的取值处于两个数据范围内的情况,包含边界值。 |
select ... from 表名 where 条件字段 between 数据A and 数值B; |
比如 找出用户表可用余额在10000.00到40000.00的用户
select * from member where leaveamount between 10000.00 and 40000.00; |
4.5 去重 distinct
使用场景:去除查询结果中的重复数据 |
select distinct 字段名 from <表名>; |
比如 查询所有投资的用户id
select distinct memberid from invest; |
4.6 分页 limit
使用场景:取查询结果的前几条 |
select ... from <表名> limit m,n; |
m:索引值从m开始。 n :每页要取多少条。 |
比如 每页取10条展示 第一页: limit 0,10 表示取索引从0开始取10条的记录 第二页:limit 10,10 表示取索引从10开始取10条的记录
那么当每页展示x条数据,取到第y页时,分页语句中的m,n分别为多少?
(y-1)x , x |
4.7 排序 order by 排序字段名 降序(desc)、升序(asc)
不写desc、asc,默认升序 | 例如 查询用户信息,以用户名升序排列 select * from member order by regname; |
order by ... desc 降序 | 例如 查询用户信息,以用户id降序排列 select * from member order by id desc; |
order by ... asc 升序 | 例如 查询用户信息,以用户名升序排列 select * from member order by regname asc; |
4.8 select 函数; select 后面直接加函数
数值相关函数 |
|
求字段A的最大、最小、平均、和 | min(字段A) max(字段A) avg(字段A) sum(字段A) |
日期函数 |
|
获取系统当前日期时间 | sysdate() |
获取系统当前日期 | curdate() |
获取系统当前时间 | curtime() |
获取给定日期的年份、月份 | year(date) month(date) |
为指定日期增加一个时间间隔 的函数 | date_add(date,interval expr unit)
例如: select date_add(sysdate(),interval 1 day); 在当前时间增加1天 |
字符串函数 |
|
字符串拼接函数 | concat(字段A,字段B)
select concat(id,regname) from member; select concat('hello','world'); |
字符串截取函数 | substr(字段A,截取开始的位置position,截取字符个数)
select substr(regname,2,3) from member; 用户名从第二个字符开始截取3个字符 |
获取字符串长度的函数 | length(字段A)
select length(regname) from member;获取用户名的长度 |
4.9 select 查询语句的结构
select...查询字段...from..查询涉及到的表....where..关联条件....group by..按主键/id进行分组....having...分组后进行过滤...order by......limit......
4.10 子查询(嵌套查询)
select * from (select id,regname,mobilephone from member) as newtable where newtable.id>3;;