写点什么

MySQL 基础之五:其他过滤方式

用户头像
打工人!
关注
发布于: 2021 年 06 月 07 日
MySQL基础之五:其他过滤方式

重点内容:

本文将介绍几个过滤方式,比如空处理函数,分组关键字和 having 关键字。

ifnull()空处理函数:

小贴士:它是一个单行处理函数,并且数据库规定:有 NULL 参与的运算,结果一定是 NULL。

ifnull()空处理函数:括号里的参数:(可能为 NULL 的数据,被当做什么处理)。

先来检验一下有 NULL 参与的运算:想要求出每一个人的一年的奖金是多少?

select ename,comm*12 from emp;
复制代码


一个人的年奖金是 NULL 不太合适吧,最少也是 0,因此如何过滤掉这些 NULL 值,并把它替换为合适的值呢?这个时候 ifnull()空处理函数就上场了。那现在就用这个函数处理一下上面的数据吧。

 select ename,ifnull(comm,0)*12 from emp;
复制代码


再看上面的数据是不是就顺眼多了,在 SQL 语句中,我把 comm 字段中为 NULL 值的都替换为 0。是不是很方便呢!

group by:

首先来解释一下这个关键字的意义:按照某个字段或者某些字段进行分组。请注意这里的分组不是上一篇介绍的分组函数哦。那它有啥用呢?先来感受下:

想要知道每个种类工作的最高薪资,该怎么写 SQL 语句呢?

select job,max(sal) from emp group by job;
复制代码


查询起来是不是很爽?先按照工作类型进行分组,然后再在每一小组中找出这个小组的最高薪资。

小贴士 1:当一条语句中有 group by 的话,select 后面只能跟分组函数和参与分组的字段-=-很重要哦

小贴士 2:分组函数一般在 group by 执行完之后再执行。

having:

这个关键字是在 group by 进行分组之后的数据进行再次过滤。

比如:求出每个部门的最高薪资,并且要求只有薪资大于 1500 的才显示出来

select deptno,max(sal) from emp group by deptno having max(sal)>1500;
复制代码


但是一般我们不这样写,因为要在 having 里要重复计算筛选一遍 max,效率比较低。既然要求薪资大于 1500 的才显示出来,为什么不一开始在 where 中就把薪资大于 1500 的先找出来,然后再进行分组,这样处理的数据就少些,效率就高一点。

select deptno,max(sal) from emp where sal>1500 group by deptno;
复制代码


两个的结果是一样的。

查询结果去重(distinct):

下面再来介绍一个关键字 distinct,作用就是:去除重复记录。

小贴士:distinct 只能出现在所有字段的最前面

查看有哪几种工作类型?

select distinct jon from emp;
复制代码


工作类型有几种?

select count(distinct job) from emp;
复制代码



发布于: 2021 年 06 月 07 日阅读数: 9
用户头像

打工人!

关注

打工人! 2019.11.10 加入

InfoQ年度最佳内容获得者。 InfoQ签约作者 本人打工人一枚,自动化和控制专业入坑人一枚。目前在研究深度强化学习(DRL)技术。准备入坑互联网小白一枚。喜欢了解科技前沿技术,喜欢拍照。

评论

发布
暂无评论
MySQL基础之五:其他过滤方式