1、聚合函数
聚合函数经常与 SELECT 语句的 GROUP BY 子句一同使用,对一组值进行计算并返回单一的值。
常见的聚合函数有avg()、sum()、count()、max()、min()、count_big()等等
2、分析函数
分析函数是在主查询结果的基础上进行一定的分析,采用partition by分组。
分析函数有如下几种形式:
over(order by ...)按照指定字段排序进行累计,order by是个默认的开窗函数
over(partition by ...)按照指定字段进行分组
over(partition by ...order by ...)
分析函数的开窗范围:
over(order by ... range between 5 preceding and 5
following):窗口范围为当前行数据幅度减5加5后的范围内
over(order by ... rows between 5 preceding and 5
following):窗口范围为当前行行数前后各移动5行。
与over函数结合的几个函数介绍:
row_number()over():如果同班有两个并列第一,只返回一个结果
rank()over():跳跃排序
dense_rank()over():连续排序
更多关于分析函数的应用可以参考博客:http://www.cnblogs.com/lanzi/archive/2010/10/26/1861338.html
3、递归查询( start with… connect by prior )
oracle中的树查询,具体涵义如下:
start with...指定递归在根节点
connect by prior 指定阶层父子关系
connect by prior parent=child:根据parent找child
connect by parent=prior child 根据 child找parent
更多关于递归的应用可以参考博客:http://www.cnblogs.com/linjiqin/archive/2013/06/24/3152674.html
4、join和union的区别:
join将两张表合并为一张,字段累加。
union将两张表数据合并为一张表数据,字段无变化。
5、nvl和decode区别:
nvl(column,default)只能在column为null时赋值default
decode(nvl(columen,value1),value1,default1,value2,default2,....,default)功能强大,根据字段不同的值赋值,最后又缺省值,可以结合nvl使用
6、union 和 union all的区别:
union all:合并查询结果直接返回
union:将合并结果删选去重,并且根据字段顺序排序后返回
注意:使用union后是根据字段顺序合并排列的,和字段名称无关,必须按照相同的字段类型顺序,才不会报错。
7、应用技巧:
应用一:多次组合使用sum和decode,可以统计分类type的数据量,不再需要分别写n条语句
sum(decode(type,'01',1,0)),
sum(decode(type,'02',1,0)),
sum(decode(type,'03',1,0))
应用二:不同表格中统计同一引用的数量
select enu_no,sum(a1),sum(a2),sum(b1)
from(
select enu_no, 1 a1,count(*) a2,0 b1 from a
union all
select enu_no, 0 a1,0 a2,1 b1 from b
)
group by enu_no
8、oracle索引:
唯一索引
该字段的值在表数据任意两列都不相同
当建立主键或者唯一约束时唯一索引会被自动建立
create union index indexname on table(column)
组合索引
当两个或者多个列经常一起出现在where条件中时,在这些列上同时创建
将使用最频繁的列放在组合索引最前面
位图索引
列中有非常多的重复值,例如某列保存了‘性别’信息
create bitmap index indexname on talbe(column[,column,column...])
函数索引
当where条件语句中包含函数或者表达式时使用函数索引
create index indexname on talbe(function());
分区索引