工作第一周Oracle函數總結,第一周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
避免複雜的多表關聯
避免使用耗費資源的操作
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。