工作第一周Oracle函数总结

1. Oracle 行转列和列转行

   最常见的行转列,主要原理利用decode函数、聚合函数(sum()  Max())、结合group by分组实现的

     MAX(DECODE(SW.SBBL, '1', SW.SBBL, NULL)) AS SBBL_01,  

      MAX(DECODE(SW.SBBL, '2', SW.SBBL, NULL)) AS SBBL_02,

      说明: SW.SBBL中值为1或2,现在将其转化为2列。如果是1就以SBBL_01为列名,这一列的值为1。如果是2就以SBBL_02为列名,这一列的值为2.

       decode(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)

    DECODE( B.TASK_STATUS,'1','办理中','2','已办理')

 列传行,主要利用sql里面的union,具体sql

    select user_name, 'CN_SCORE' COURSE , CN_SCORE as SCORE from test_tb_grade2
     union
     select user_name, 'MATH_SCORE' COURSE, MATH_SCORE as SCORE from test_tb_grade2
     union
     select user_name, 'EN_SCORE' COURSE, EN_SCORE as SCORE from test_tb_grade2
     order by user_name,COURSE

2. 对表中的数据进行去除重复,当表数据小的时候可以直接使用distinct(属性),但当表数据大的时候

     使用exists替换distinct
     低效
     select distinct dept_no,dept_name
          from dept d,emp e
     where d.dept_no=e.dept_no
     高效
    select dept_no,dept_name
         from dept d
     where exists(select 1 from emp e
              where e.dept_no=d.dept_no)

3.  oracle采用自下而上的顺序解析where子句。当where中多表联接,返回行数少的表,有过滤条件的子句应放在where子句最后

4.  当表数据大的时候,使用truncate替代delete进行数据删除操作

5.  将date类型的数据进行转化为字符串类型操作。

     TO_CHAR(B.RECEIVE_TIME, 'YYYY-MM-DD HH24:MI:SS') RECEIVE_TIME

6.sql优化一般原则:
  尽量依赖oracle优化器,建立合适的索引。
  编码方面 利用索引,避免大表、合理使用临时表、避免写复杂sql

几个常见优化方案
    创建表时,应尽量建立主键,根据实际需要调用整数据表pctfree和pctused参数
    大数据表删除 truncate table
    少用*号 select count(key) from tab where key>0性能优于 select count(*)
    尽量少用嵌套子查询
    对于比较多or运算,建议分成多个查询,用union all联结起来
    oracle 解析器对表解析从右到左,记录少的表放在右边
    访问频繁的表可常驻内存。alter table ..cache
    避免复杂的多表关联
    避免使用耗费资源的操作

你可能感兴趣的:(Oracle,优化)