程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> 工作第一周Oracle函數總結

工作第一周Oracle函數總結

編輯: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
避免復雜的多表關聯
避免使用耗費資源的操作

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved