在接過幾個系統維護專案,曾經遇過預存程序寫的不好導致系統運作緩慢,努力追蹤後才發現,原因是語法上使用不當,

在資料量少的時候影響不大,但是系統運行一段時間後,資料量越來越大,系統回應速度就越來越緩慢,


久而久之遇到越來越多類似的問題,漸漸的覺得SQL語法雖然相當基礎,但SQL要寫的好卻是一門學問。

----------------------------------- 我是分隔線 -----------------------------------

這篇將繼續補充single row functions:

包含一般常用於判斷NULL、條件式判斷的single row function

除此之外,也簡單介紹常用的group functions



一、一般常用single row function:

1.NVL:如果expr1為null,則回傳expr2



NVL(expr1,expr2)

2.NVL2:如果expr1不為null,則回傳expr2;若expr1為,則回傳expr3。
NVL2(expr1,expr2,expr3)


3.NULLIF:expr1與expr2比較,若相同回傳NULL,否則回傳expr1

NULLIF(expr1,expr2)


4.COALESCE:回傳非null的expr

COALESCE(expr1,expr2,...exprn)


二、條件式single row function:

1.CASE: 若expr符合comparison_expr1 則回傳return_expr1, 依此類推..

CASE expr WHEN comparison_expr1 THEN return_expr1

[WHEN comparison_expr2 THEN return_expr2

WHEN comparison_exprn THEN return_exprn

ELSE else_expr]


2.DECODE:與CASE類似,但可以將欄位作為比較條件,回傳符合查詢條件的結果。

DECODE( col|expression, search1, result1

[,search2, result2, ...,]

[, default] )


三、巢狀使用single row function:

例:

select last_name, UPPER(CONCAT(SUBSTR(LAST_NAME,1,8),_US))

from employee

where department_id = 60


四、group function

1.AVG: 平均值

2.COUNT:計數

3.MAX:最大值

4.MIN:最小值

5.SUM:總和

select count(*) from table

select AVG(salary) , MAX(salary), MIN(salary) ,SUM(salary)

from employee


--

很多function靈活用運,會讓自己在工作上省了不少功夫,

有工具的時候就要使用,免得讓自己作了一大段後,才發現別人已經做好工具可以用了!!