我们知道,在很多情况下表中的某些字段是允许为null的,并且有时候是不得不需要关注null的,例如在实际的需求中会有类似的需求:涉及null数据视为无效,此时我们就需要将含有null的数据进行筛选并剔除,最后展示出我们想要的有效数据即可。
下面先实现一个小需求:查询employees表中所有数据
这是employees表的表结构。
实现需求:
select e.* from employees e
结果:
以上就是该表中的所有数据内容,但是可以看出commission字段很多为null。
那么现在我么可以将需求改变一下,查看所有有津贴的员工信息
此时sql可以写成:
select e.* from employees e where e.commission is not null;
可以看出,此时出来的是全部有津贴的员工信息。
此时应该考虑一下,既然是查询有津贴的员工信息,那么我们可以不可在where字句中将
e.commission is not null 写成e.commission != null呢?
我们可以看一下执行结果:
可以看出:并没有报错,但是也并没有结果输出出来,这是因为空值并不能进行比较,如果这样这样做了,返回值姜还是控制
oracle中的常用聚合函数:
sum函数:计算总和
avg:计算平均值
min:计算最小值
max:计算最大值
count函数:计算数据条数
聚合函数的使用:
需求使用聚合函数计算出员工津贴的总值,平均值,最小值,最大值,和字段数
SELECT SUM(e.commission) '津贴总值',
AVG(e.commission) '津贴均值',
MIN(e.commission) '最小津贴值',
MAX(e.commission) '最大津贴值',
COUNT(e.commission) '津贴字段数量'
from employees e;
这里可以看出空值是被自动忽略了。
这里指的注意的是,我在使用count函数的时候用的是具体的字段,那么我用*会是什么结果呢?
可以看到,这里津贴字段有13条数据,结合上面查看去全表数据,全表确实有13条数据。
那么这里我们可以得出结论:在使用AVG、SUM、MIN、MAX、COUNT聚合函数时,当时用一个列名计算的时候空值会被自动去掉,特别的,当使用COUNT函数使用常量例如(*或1)时,空值不会被自动去掉。