当前位置: 首页 >数据库 > WHERE、ORDER BY、GROUP BY、HAVING语句解析(二十八)

WHERE、ORDER BY、GROUP BY、HAVING语句解析(二十八)

 

 

  之前啊,我们提及到,对于update和delete,若不带where条件,则对所有记录都有效。

 

WHERE、ORDER BY、GROUP BY、HAVING语句解析(二十八) _ JavaClub全栈架构师技术笔记

 

一、WHERE条件表达式

  (1)对记录进行过滤,如果没有指定WHERE子句,则显示所有记录。

  (2)在WHERE表达式中,可以使用MYSQL支持的函数或运算符。

  比如update语句和delete语句都可以带有where条件,如果没有指定where子句,将对所有记录有效,比如update语句,如果省略掉了where语句,将更新所有的记录。在where表达式中,还可以使用mysql支持的函数或运算符。比如刚才我们更新id号为偶数的记录时,我们使用了%,他就是典型的取模运算符,函数和运算符我们后面还会给大家做更详细的介绍。

 

 

 

 

 

 

 

 

 

二、GROUP BY

  查询结果分组

[GROUP BY {col_name | position} [ASC | DESC],… ]

  除了可以带where条件对记录进行过滤外,还可以对查询的结果进行分组,也就是用group by关键字,在分组的时候既可以指定列的列名,也可以指定列的位置,在语法结构中我们还可以看到两个关键字,一个是ASC,一个是DESC,ASC表示的是升序,而且是默认的,DESC表示的是降序,如果存在多个分组条件的话,那么多个分组条件之间用逗号分割,下面我们来看一下到底什么是分组?

 

 

 

WHERE、ORDER BY、GROUP BY、HAVING语句解析(二十八) _ JavaClub全栈架构师技术笔记

select*fromuser;

 

 

 

 

 

  我们还以user数据表为例,假设我们按照性别来分组。操作命令及结果如下:

WHERE、ORDER BY、GROUP BY、HAVING语句解析(二十八) _ JavaClub全栈架构师技术笔记

selectsexfromuser  groupby  sex;

 

 

 

 

 

 

  除了可以写字段名字之外,还可以写位置,例如:

WHERE、ORDER BY、GROUP BY、HAVING语句解析(二十八) _ JavaClub全栈架构师技术笔记

selectsexfromusergroup  by  1;

  命令中的1表示的就是select语句当中第一个出现的字段。然后依次来类推,但是建议大家尽量去指定列的名称,

而不要指定字段的位置,因为还需要我们人为的去数一数某个字段对应的位置,相对来说会更麻烦。所以建议大家指定字段的名称。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

三、HAVING

  分组条件

[HAVING where_condition]

  在groupby分组的时候,其实还可以带有分组的条件,也就是说我既可以对所有的记录进行分组,也可以对某一部分记录进行分组,下面我们来演示一下,操作命令及结果如下:

WHERE、ORDER BY、GROUP BY、HAVING语句解析(二十八) _ JavaClub全栈架构师技术笔记

select  sex  from  user  group  by  1  having  age>30; 

  我们发现系统提示我们有一个错误,为什么会有这个错误呢,原因在于如果使用having进行分组条件的指定时,一定要保证分组的条件要么为聚合函数,要么条件字段出现在select语句当中,否则系统就会报错。

 

 

 

 

 

 

  下面我们再来做一下修改。操作命令及结果如下:

WHERE、ORDER BY、GROUP BY、HAVING语句解析(二十八) _ JavaClub全栈架构师技术笔记

selectsex,agefromuser  group  by  1  havingage>30;

现在虽然说没有查找到结果,但是至少说我们的语法结构是书写正确的。

 

 

 

 

 

 

  下面我们来使用一个聚合函数。操作命令及结果如下:

WHERE、ORDER BY、GROUP BY、HAVING语句解析(二十八) _ JavaClub全栈架构师技术笔记

select  sex,agefromuser  group  by  1havingcount(id)<=2; 

  当然聚合函数有很多,比如max求最大值,min求最小值,avg求平均值,sum求和等等,因为他们永远只有一个返回结果。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

WHERE、ORDER BY、GROUP BY、HAVING语句解析(二十八) _ JavaClub全栈架构师技术笔记

 

四、ORDER BY

  对查询结果进行排序

[ORDER BY {col_name | expr | position} [ASC | DESC],…]

  除了可以对分组指定条件以外,还可以对分组的结果进行排序,从语法结构莪们可以看出,我们可以对字段,表达式或位置进行排序,和刚才的group by 是一样,ASC是升序,而且是默认的,DESC表示降序,下面我们来做个演示,我们让id字段降序排列。操作命令及结果如下:

WHERE、ORDER BY、GROUP BY、HAVING语句解析(二十八) _ JavaClub全栈架构师技术笔记

select*  fromuser  orderbyiddesc;

  那么可不可以对两个字段同时做排序呢,当然可以,当然他会先看第一个字段能不能排成你想要的结果,如果第一个字段能排成你想要的结果,那么他就会直接忽略掉第二个字段,如果第一个字段不能排成你想要的结果,那么他就会考虑第二个字段,甚至第三、第四个。

 

 

 

 

 

 

  下面我们做一个演示,假设我们先让age字段按升序排列,为了保证有相同的年龄的记录,我们提前再插入一条年龄相同的记录,操作命令及结果如下:

WHERE、ORDER BY、GROUP BY、HAVING语句解析(二十八) _ JavaClub全栈架构师技术笔记

insertuservalues(null,'123','234','30',1);select*  fromuser  orderby  age;

 

 

 

 

  假设我们让age相同的字段的id字段按照降序排列,我们就可以这样写,操作命令及结果如下:

WHERE、ORDER BY、GROUP BY、HAVING语句解析(二十八) _ JavaClub全栈架构师技术笔记

select  *fromuserorderby  age,iddesc;

  我们发现已经变成了我们想要的结果。

 

作者:大数据和AI躺过的坑
来源链接:https://www.cnblogs.com/zlslch/p/6541736.html

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。





本文链接:https://www.javaclub.cn/database/118145.html

标签:group by
分享给朋友:

“WHERE、ORDER BY、GROUP BY、HAVING语句解析(二十八)” 的相关文章

JDBC工具类(DButil) 2022年05月13日 09:13:25
MySQL主从复制 2022年05月17日 21:34:56
连接数据库版本不一致 2022年05月20日 01:07:15
mysql的查询句 2022年06月09日 23:40:52
mysql查询给某个字段赋值 2022年06月10日 21:43:53
mysql查询数据库表的数据行数 2022年06月12日 12:49:23
MySQL查询请求执行过程分析 2022年06月15日 10:06:22
mysql 去重查询 2022年06月15日 10:54:01