oracle中的函数

Oracle SQL 技巧与优化

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());

分区索引
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值