Oracle数据库中的函数很多,其分组函数和聚合函数是Oracle函数中比较常用的函数。
分组函数有Group by 函数,聚合函数有count()、sum()、avg()、max()、min()等等,这里做一些自己的总结,会不断的更新本文的内容。
-
CREATE TABLE STUDENT
(
STU_NAME VARCHAR2(10),
STU_NO NUMBER(5,0) PRIMARY KEY NOT NULL,
STU_AGE NUMBER(3,0)
) -
-
1. select count(STU_AGE) from STUDENT
-
检索项目中只有聚合函数count(),则一定检索到一条数据,表STUDENT中没有数据,则结果为0,
-
表STUDENT中有数据,则为数据的件数。
-
-
2. select sum(STU_AGE) from STUDENT
-
检索项目中只有聚合函数sum(),则一定检索到一条数据,表STUDENT中没有数据,则结果为null,
-
表STUDENT中有数据,则为每条数据的STU_AGE的和。
-
-
使用数据库查看工具可能看不到null的效果,反而跟没有使用sum()函数检索到数据的结果一样,例如:
-
select STU_AGE from STUDENT 结果和select sum(STU_AGE) from STUDENT结果在数据库查看工具中一样,但是在java代码中可以看到区别,前面sql文检索到0条数据,后面的sql文检索到1条数据,但数据的结果为null。
-
-
在数据库查看工具中使用下面的方式区分:
-
select nvl(sum(STU_AGE),0) from STUDENT 结果为0,
-
nvl()函数是在检索结果中( 存在至少一条数据),如果字段STU_AGE的值为NULL,则用0来替换NULL,
-
上面的sql文因为使用nvl后的显示结果为0,说明检索到一条数据了。
-
-
检索项目中不只有聚合函数sum(),eg:
-
select STU_NAME,sum(STU_AGE) from STUDENT group by STU_NAME
-
则存在检索不到数据的情况,例如表STUDENT中没有数据,检索到0件数据。
-
-
在数据库查看工具中使用nvl的方式:如下
-
select STU_NAME,nvl(sum(STU_AGE),0) from STUDENT group by STU_NAME
-
检索结果中不存在0,说明没有检索到数据。
为什么会产生上面的结果,我正在查询中?可能需要了解sql执行顺序机制,以及执行中什么时候终止。
-
3.聚合函数avg()、max()、min()的情况和sum()函数一样,自己可以试一下。
-