4.数据库表的高级查询

4.数据库表的高级查询

4.1   in   

使用场景:查询时,条件字段的值存在某个数据集中

数据集:可以是具体的某几个值,也可以是通过一个子查询得到的数据集

select ... from 表名 where 条件字段 in (数据集);

比如: 从member表中查询用户id1001,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.0040000.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)

不写descasc,默认升序

例如 查询用户信息,以用户名升序排列

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.id3;

原文地址:https://www.cnblogs.com/Aphrodite/p/10064958.html