mysql分组语句的子句_Mysql查询语句的 where子句、group by子句、having子句、order by子句、limit子句...

Mysql的各个查询语句

一、where子句

语法:select *|字段列表 from 表名 where 表达式。where子句后面往往配合MySQL运算符一起使用(做条件判断)

作用:通过限定的表达式的条件对数据进行过滤,得到我们想要的结果。

1.MYSQL运算符:

MySQL支持以下的运算符:

关系运算符

<=  >=

=   !=(<>)

注意:这里的等于是一个等号

between and

做数值范围限定,相当于数学上的闭区间!

比如:

between A and B相当于 [A,B]

8f19fb974f0ef7f6ee0788eb6e869f67.png

60e435f033e5ec93f4a9f600c6f3585c.png

in和not in

语法形式:in|not in(集合)

表示某个值出现或没出现在一个集合之中!

33ac22706f32b92b7ac12399aa261757.png

逻辑运算符

&&  and

||   or

!   not

0bb9710e9f2248fe9e594fb1cb86e2e2.png

where子句的其他形式

空值查询

select *|字段列表 from 表名 where 字段名 is [not]  null

6099d6620f17202c92f971c12f3acfd5.png

ed5e7aed67cb3aa958e6bc0b2d7b5905.png

模糊查询

也就是带有like关键字的查询,常见的语法形式是:

select *|字段列表from表名where字段名[not] like ‘通配符字符串’;

所谓的通配符字符串,就是含有通配符的字符串!

MySQL中的通配符有两个:

_   :代表任意的单个字符

%   :代表任意的字符

案例一:

查找student表中student_name字段以“j”开头的学生信息!

82ac3b162845ce5e992fc79e7fb167cf.png

案例二:

查找student表中student_name字段以“j”开头以“n”结尾的学生信息!

e0d126b02369f6cdccf197ed22cb6b55.png

案例三:

查找student表中student_name字段含有“n”字的学生信息

a3927e441f071fe4322d3faee8257bb6.png

案例四:

查找student表中student_name以“j”开头含有四个字母的名字的学生信息

cb724e8a5ee5b1a40ec043c243b7c531.png

案例五:

查找student表中stu_name含有_或含有%的学生信息

由于%和_都具有特殊的含义,所以如果确实想查询某个字段中含有%或_的记录,需要对它们进行转义!

也就是查找  \_   和   \%

81f42d0fcbb29ab533ce5486bddb8625.png

二、group by子句

也叫作分组统计查询语句!

语法

group by 字段1[,字段2]……

从形式上看,就是通过表内的某个或某些字段进行分组:

4ff0226c866cd0334d07530adaa29d52.png

所以,分组之后,只会从每一个组内取出第一条记录,这种查询结果毫无意义!

因为分组统计查询的主要作用不是分组,而是统计!或者说分组的目的就是针对每一个分组进行相关的统计!

此时,就需要使用系统中的一些统计函数!

统计函数(聚合函数)

sum():求和,就是将某个分组内的某个字段的值全部相加

18e85ab89d7520141a46b1fdafbdb089.png

等于做了以前的两件事情:

1,  先按home字段对整个的表进行分组!(分成了4组)

2,  再把每一个组内的所有记录的age字段的值全部相加

6d772f05301f2d938adab7c917e79667.png

max():求某个组内某个字段的最大值

78e274f1ae29dc60de8f586648afe263.png

min():求某个组内某个字段的最小值

8369d861025a549a0eaa46e23d701da8.png

avg():求某个组内某个字段的平均值

5d8c9910013fb1b282aa005342780c3f.png

count():统计某个组内非null记录的个数,通常就是用count(*)来表示!

90e0bc56249b12aa5e2c7846ae7c8ae8.png

65a53801dcdc1c7b18cd22d909a2e0d2.png

注意:

统计函数都是可以单独的使用的!但是,只要使用统计函数,系统默认的就是需要分组,如果没有group by子句,默认的就是把整个表中的数据当成一组!

a38079ba7be8519406e3731fc00a89fc.png

多字段分组

group by 字段1[,字段2]……

作用是:先根据字段1进行分组,然后再根据字段2进行分组!

f1b516c70f0e44963ec46df5c86c3151.png

所以,多字段分组的结果就是分组变多了!

回溯(su)统计

回溯统计就是向上统计!

在进行分组统计的时候,往往需要做上级统计!

比如,先统计各个班的总人数,然后各个班的总人数再相加,就可以得到一个年级的总人数!

再比如,先统计各个班的最高分,然后各个班的最高分再进行比较,就可以得到一个年级的最高分!

如何实现?

答:在MySQL中,其实就是在语句的后面加上with rollup即可!

7e181e116ff2d6f486bad13eea822f4b.png

cc10850a950cf92a1fc2f81a14f8cfb7.png

409441e8c2cfd93f19ce0c0dc18cc002.png

注意:

既然group by子句出现在where子句之后,说明了,我们可以先将整个数据源进行筛选,然后再进行分组统计!

三、having子句

having子句和where子句一样,也是用来筛选数据的,通常是对group by之后的统计结果再次进行筛选!

43b2b30a20aa1061043ec262074f9561.png

那么,having子句和where子句到底有什么区别呢?

二者的比较:

1,  如果语句中只有having子句或只有where子句的时候,此时,它们的作用基本是一样的!

130293fb6ee6f34206cb0bc5fd6b65d9.png

2,  二者的本质区别是:where子句是把磁盘上的数据筛选到内存上,而having子句是把内存中的数据再次进行筛选!

3,  where子句的后面不能使用统计函数,而having子句可以!因为只有在内存中的数据才可以进行运算统计!

1d58e064817bcaa303c35086de4b6f76.png

四、order by子句

语法

根据某个字段进行排序,有升序和降序!

语法形式为:

order by字段1[asc|desc]

默认的是asc,也就是升序!如果要降序排序,需要加上desc!

①根据id排序

ea4eafa1ed90d6d7c1ad5c5e87cda00a.png

②根据成绩排序

020d586f671070a4a40db7f785e35ec4.png

思考:

假如现在有若干个学生的成绩score是一样的,怎么办?

此时,可以使用多字段排序!

多字段排序

order by字段1[asc|desc],字段2[asc|desc]……

比如:order by score asc,age desc

也就是说,先按分数进行升序排序,如果分数一样的时候,再按年龄进行降序排序!

2444cdb9ca173ad900d76e6013575977.png

五、limit子句

limit就是限制的意思,所以,limit子句的作用就是限制查询记录的条数!

语法

limit  offset,length

其中,offset是指偏移量,默认为0,而length是指需要显示的记录数!

思考:

limit子句为什么排在最后?

因为前面所有的限制条件都处理完了,只剩下需要显示多少条记录的问题了!

2024c3418b4580259472061a3e71c725.png

思考:

假如现在想显示记录的第4条到第8条,limit子句应该怎么写?

limit 3,5;

7539198d177fa982596e6ba7c5bbe5c9.png

注意:这里的偏移量offset可以省略的!缺省值就代表0!

67d204762d5c2354aa728e7383778839.png

分页原理

假如在项目中,需要使用分页的效果,就应该使用limit子句!

比如,每页显示10条记录:

第1页:limit 0,10

第2页:limit 10,10

第3页:limit 20,10

如果用$pageNum代表第多少页,用$rowsPerPage代表每页显示的长度

limit ($pageNum - 1)*$rowsPerPage, $rowsPerPage

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值