设为首页 加入收藏

TOP

工作第一周Oracle函数总结
2015-11-21 01:43:09 来源: 作者: 【 】 浏览:0
Tags:工作 第一 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集群-搭建系列-文章目录(V.. 下一篇给员工涨工资,总裁1000,经理800..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: