您的位置:首页 > 数据库 > Oracle

工作第一周Oracle函数总结

2015-08-30 17:37 537 查看
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

避免复杂的多表关联

避免使用耗费资源的操作
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: