日期:2014-05-16  浏览次数:20362 次

Oracle 集锦
1 decode 数据转换
  例如:在表中 性别存储的是 0 或者 1 在 在展现层需要展现出男或者女,可作如下操作
  select decode(sex,'0','男','1','女') as sex from users  ;
  查询后返回 男或者女,此函数只适用于 oracle
2 COALESCE 返回其参数中第一个非空表达式
   参数:任何类型的表达式,所有表达式必须是相同类型,如果所有的参数都为null,则返回 null
  例如:
select coalesce('','333') comm from dual ;
查询的结果是:333
3 STDDEV(distinct|all)
求标准差,ALL表示对所有的值求标准差,DISTINCT表示只对不同的值求标准差
例如:
SQL> select stddev(sal) from scott.emp;

STDDEV(SAL)
-----------
  1182.5032

SQL> select stddev(distinct sal) from scott.emp;

STDDEV(DISTINCTSAL)
-------------------
     1229.951
4 minus
minus运算的主要功能是: 在进行两个表格或者两个查询结果的时候 ,
返回在第一个表格/查询结果中与第二个表格/查询结果不相同的记录
使用时:两个表里面的字段类型最好一致
例如: A 表
     ID   Name
      1    qq
      2    tt
      3    uu
      B  表
      ID   Name
      1     qq
      2     ta
      3     uu
那么
      (SELECT * FROM A)
      MINUS
      (SELECT * FROM B)
的结果是:
      ID   Name
       1    qq
       3    uu
5  分析函数over
  Oracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是对于每个组返回多行,而聚合函数对于每个组只返回一行。
例如:
    表  test
    classNo   name     age
    1         zhang1   1
    1         zhang1   2
    2         zhang1   3
    2         zhang1   4
    2         zhang1   5
    3         zhang1   6
    3         zhang1   6
    4         zhang1   7

    select classNo,name,sum(age)over(partition by classNo) allage from test
得到的结果是:
    classNo   name     allage
    1         zhang1   3
    1         zhang1   3
    2         zhang1   12
    2         zhang1   12
    2         zhang1   12
    3         zhang1   12
    3         zhang1   12
    4         zhang1   7
  
  group by是对检索结果的保留行进行单纯分组,一般总爱和聚合函数一块用例如AVG(),COUNT(),max(),main()等一块用。
partition by虽然也具有分组功能,但同时也具有其他的功能。它属于oracle的分析用函数。
sum() over (PARTITION   BY   ...) 是一个分析函数。他执行的效果跟普通的sum   ...group   by   ...不一样,它计