WEB开发网
开发学院数据库Oracle Oracle数据库入门之函数/类型 阅读

Oracle数据库入门之函数/类型

 2012-11-28 15:25:44 来源:WEB开发网   
核心提示:这种对齐方式的书写是为了增加可读性,当然也可以把代码写在同一行上其中case到end之间的整体就相当于普通查询中的一个字段,Oracle数据库入门之函数/类型(3),end后面的“部门”是别名DEDODE()函数概述:和case表达式类似,它也用于实现多路分支结构格式:decode(col|ex
这种对齐方式的书写是为了增加可读性,当然也可以把代码写在同一行上
其中case到end之间的整体就相当于普通查询中的一个字段,end后面的“部门”是别名



DEDODE()函数
概述:和case表达式类似,它也用于实现多路分支结构
格式:decode(col|expression, search1, result1
[, search2, result2,...,]
[, default])
举例:select empno, ename, sal,
decode(deptno, 10, '财务部',
20, '研发部',
30, '销售部',
'未知部门')
部门
from emp;



COUNT()函数
格式:count(*)返回组中总记录数目
count(exp)返回表达式exp值非空的记录
count(distinct(exp))返回表达式exp值不重复的、非空的记录数目
举例:select count(*) from emp;--缺省的情况下,整个表就是一组
select count(comm) from emp;--返回emp表中comm字段不为空的记录(行)数目
select count(distinct(deptno)) from emp;--查找deptno值为非空且不重复的记录数目



分组函数与空值
概述:分组函数省略列中的空值。可使用NVL()函数强制分组函数处理空值
举例:select avg(comm) from emp;--等价于sum(comm)/count(comm)
select sum(comm) from emp;--计算表中非空的comm值的总和
select avg(nvl(comm,0)) from emp;--等价于avg(nvl(comm,0))/count(*)



GROUP BY子句
概述:它用于将表中数据分成若干小组
格式:select column, group_function(column)
from table
[where condition]
[group by group_by_expression]
[order by column];
举例:select deptno, avg(sal) from emp group by deptno;
说明:出现在SELECT列表中的字段,如果不是包含在组函数中,那么该字段必须同时在GROUP BY子句中出现
包含在GROPY BY子句中的字段则不必须出现在SELECT列表中。子句执行顺序是where→group by→order by缺省按升序排列
补充:select deptno, job, avg(sal) from emp group by deptno, job order by deptno desc;--基于多个字段的分组
select deptno, avg(sal) from emp;--非法
注意:如果没有GROUP BY子句,SELECT列表中不允许出现字段(单行函数)与分组函数混用的情况
WHERE中不允许使用分组函数,如select deptno, avg(sal) from emp where avg(sal)>2000 group by deptno;--非法
这跟子句执行的顺序有关。where子句最先执行,在执行where子句的时候还没有执行过group by子句
于是程序不知道这是在分组,也不曾计算过avg(sal)的组内平均工资,所以在where子句中不允许使用分组函数
由于还没有执行过group by子句,所以此时就不确定如何怎么分组以及分多少个组
所以where子句中只能进行初级过滤。此时可以使用HAVING子句实现对平均工资的过滤



HAVING子句
概述:它用于过滤分组
格式:select column, group_function(column)
from table
[where condition]
[group by group_by_expression]
[having group_condition]
[order by column];
举例:select deptno, job, avg(sal)
from emp
where hiredate >= to_date('1981-05-01','yyyy-mm-dd')
group by by deptno, job
having avg(sal) > 1200
order by deptno, job;

上一页  1 2 3 

Tags:Oracle 数据库 入门

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接