不可否认SQL语句的功能非常强大,但是,在大多数的时候,我们还是会在使用SQL语句的过程中,调用数据库内嵌的函数,通过函数来强化我们SQL语句的功能,以达到我们预期的目的,尤其是在满足一些应用程序对统计报表的需求情况下。
首先,简单说说单行函数(Single-Row Functions)。在Oracle数据库里,单行函数大概可以细分为Character function,Number function,Date function,Conversion function,General function。其实,Oracle数据库支持的函数足够多了,在这里不一一列举具体用法和使用规则了,我们应该清晰的一个概念就是:单行函数可以多次嵌套调用。
另外,大概说一下分组函数(Group Functions)。所谓分组函数跟单行函数的区别就是:单行函数是对数据源中的记录逐条分别作为函数的输入参数来处理,最终得到函数处理的结果。而分组函数就是把数据源中的记录按照某种特定的需求以分组的形式来作为函数的输入参数处理,最终得到处理的结果自然就是以组的形式区分开来。
来简单看一下,使用分组函数的语法规则:
SELECT column, group_function(column) FROM table [WHERE condition] [GROUP BY group_by_expression] [ORDER BY column];
我们在使用分组函数的时候需要注意的几个地方就是:
①All columns in the SELECT list that are not in group functions must be in the GROUP BY clause.凡是出现在查询列表中的没有应用分组函数的字段必须要出现在GROUP BY子句中,否则报错。
②The GROUP BY column does not have to be in the SELECT list.反之,出现在GROUP BY从句中的字段并非一定要出现在查询列表中。并且,GROUP BY从句中可以出现排序列表,即可以对多列进行分组排序。
③You cannot use the WHERE clause to restrict groups.You cannot use group functions in the WHERE clause.You use the HAVING clause to restrict groups.我们不能在WHERE从句中对分组做限制,也不能在WHERE从句使用组函数,而应该通过在HAVING子句中使用分组函数来实现这一目的。
④ORDER BY从句同样可以使用分组函数,而且该分组函数同查询列表中使用的分组函数以及HAVING从句中的三类分组函数,均可以不同。
⑤分组函数只能嵌套调用一次。