模糊查询与分组查询

模糊查询与分组查询

模糊查询

模糊查询提取的数据不一定是确切的,它允许用户输入的查询条件也是模糊的、大概的、不特别明确的。

在进行数据库查询时,有完整查询和模糊查询之分,完整查询和模糊查询的区别在于where子句的条件表达式的条件部分。在条件部分经常使用通配符来实现LIKE运算,通配符有“ %”、“ _” “ []” ,需要注意的是这些通配符只有char、 varchar 和text类型才嫩南瓜使用LIKE 运算符和通配符

LIKE运算符

在常用的模糊查询条件时使用LIKE 运算符加上通配符来表达,这里的 “ LIKE” 是 “ 像 …” 的意思。LIKE运算表达式的基本组成是“ where 字段 LIKE 统配字段符”,这里通配符是包含了通配符的字符串常量,常用的通配符有 “% ” ," __"

注意 因为LIKE是按照格式进行条件查询的,因此它只能作用域字符串类型的字段 如 : char 、 varchar 、 test等

用 “ %” 通配多个字段

通配字符串中的 ” %” 表示0-n任意字段,,例如 “王%” 代表以“ 王” 开头的任意字符串,而 “ % 了” 代表了所有以“了” 结尾的字符串,为“%英雄%“ 则表示了所有包含”英雄 “ 两个汉字的字符串

例如:

create  database three20210608 default charset=utf8;
use three20210608;
create table  stiudentInfo(
id  int  ,
students  varchar(10),
Gender varchar(12),
Age int 
);


insert into stiudentInfo  values(21,'刘文钦','今天也要加油吖',19 );


select* from stiudentInfo;
select id ,students,Gender,Age from stiudentInfo where students  LIKE '刘%';
用" __" 统配单个字符

通配字符中 “ _” 表示单个任意字符,若需要表示两个字符的匹配,呢需要使用两个“ _” 通配符

示例

create  database three20210608 default charset=utf8;
use three20210608;
create table  stiudentInfo(
id  int  ,
students  varchar(10),
Gender varchar(12),
Age int 
);


insert into stiudentInfo  values(21,'刘文钦','今天也要加油吖',19 );




select* from stiudentInfo;
select id ,students,Gender,Age from stiudentInfo where students  LIKE '刘%';
select id ,students,Gender,Age from stiudentInfo where students  LIKE '__钦';


" __"和“ %” 许多时候配合使用,可以产生多种组合结果,因此可以解决复杂的条件查询问题。

示例;

create  database three20210608 default charset=utf8;
use three20210608;
create table  stiudentInfo(
id  int  ,
students  varchar(10),
Gender varchar(12),
Age int 
);


insert into stiudentInfo  values(21,'刘文钦','今天也要加油吖',19 );




select* from stiudentInfo;
select id ,students,Gender,Age from stiudentInfo where students  LIKE '刘%';
select id ,students,Gender,Age from stiudentInfo where students  LIKE '__钦';
select id ,students,Gender,Age from stiudentInfo where students  LIKE '_钦%';

集合函数

在对数据机型查询时经常会碰到的要求获取某些列的最大值、最小值、平均值等统计分析情况,有时候还需要机选出究竟查询到多少行数据项。MySQL针对此应用提供了 “ 聚合函数”

聚合函数在计算过程中是忽略控制的,他经常与 SELECT 语句的GROUP BY 子句一同使用,对某列诗句进行分类统计。所有聚合函数都具有确定性。任何时候用一组给定的输入值调用它们时,都会返回下共同的值

SUM

SUM() 函数用于对数据求总和,返回选取结果集中某列所有值的总和,可以计算某列中所有数据的累加总和,在计算过程中会忽略该列中NULL值

例如:

select SUM(EXAM) from Exam where ID='2012001002';

在聚合函数中的查询命令中,其运行机制是先运行where子句及之后的哥哥部分,而聚合函数是针对结果集中的数据进行运算的。

注意

(1) ,在标准SQL中,对于所有的聚合函数都一样,不能够与普通列一起进行查询,但是由于MySQL的语法要求不是完全要求按照SQL标准所以可以使用,不过在实际开发中应该避免和普通列一起使用

(2),聚合函数一定是用在查询中,作为一个列出现,这个列也是计算列,在数据表中不存在这一列,因此一般来说要起一个别名

MAX/ MIN

MAX()返回在查询结果中参数列的最大值,MIN()返回在查询结果中参数列的最小值,他们是对参数列的各个值进行比较运算,因此可以用于数字、字符、日期等类型。

示例:

select MAX(Exam) as '最高成绩',MIN(Exam) AS '最低成绩' where Exam Where SubjectId=1;

AVG

AVG()函数返回查询结果中参数列所有数值的平均值,AVG()函数也只能用于数字类型的列。

示例

select AVG( EXAM ) AS 平均分 from EXOM  where SubjectId=1;

COUNT

count()函数用于统计查询结果中包含记录的行数。其使用方式有两种

1: COUNT(*) : 计算数据表或者查询结果集的总行数,不管某一列或多列是否为空值

2:COUNT(*):计算查询结果中指定字段的总行数,计算时将会忽略该列为空的行

分组查询

使用 Group By 进行数据分组查询

示例

select  SubjectID,AVG(Exam) as 平均分 from ExamGROUP by SubjectID 

多列分组查询

分组查询在有些情况下还需要按照多个字段的值进行分组,

例如 学生表中记录了每个学生的信息,包括所属年纪和性别等。如果要统计每个班级的男女生人数,理论上要先把每个班级进行分组,然后针对每个班级的性别进行分组,最后进行统计,也就是说我们需要按照两个列进行分组

select Classid as '班级编号', Gender as '性别' ,COUNT(Studentid) as '人数'
from StunentInfo Group by ClassID,Gender;

注意:

使用GROUP by 关键字后,在select语句的字段部分可以指定的列是由限制的,但仅允许以下几项

1)被分组的列

2)为每个分组返回一个值的表达式,例如聚合函数计算出的列

having 子句-分组查询的条件筛选

having子句和where子句的作用类似都是作为条件出现的,但是两者的运行顺序并不一样。在查询语句中where、GROUP BY、HAVING 可以一起使用

使用顺序:

where——》GROUP BY ——》HAVING

注意:
在查询语句中 WHERE、GROUP BY 、 HAVING 子句和聚合函数的执行次序如下:
首先执行WHERE子句从数据库中筛选出需要的数据;然后通过GROUP BY 子句将筛选后的数据进行分组,聚合函数进行统计运算,最后,HAVING子句筛选掉那些分组后不符合要求的数据行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值