模糊查询与分组查询

模糊查询与分组查询

模糊查询

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

在进行数据库查询时,有完整查询和模糊查询之分,完整查询和模糊查询的区别在于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子句筛选掉那些分组后不符合要求的数据行

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,816评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,729评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,300评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,780评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,890评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,084评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,151评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,912评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,355评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,666评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,809评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,504评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,150评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,121评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,628评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,724评论 2 351

推荐阅读更多精彩内容