在接過幾個系統維護專案,曾經遇過預存程序寫的不好導致系統運作緩慢,努力追蹤後才發現,原因是語法上使用不當,
在資料量少的時候影響不大,但是系統運行一段時間後,資料量越來越大,系統回應速度就越來越緩慢,
久而久之遇到越來越多類似的問題,漸漸的覺得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靈活用運,會讓自己在工作上省了不少功夫,
有工具的時候就要使用,免得讓自己作了一大段後,才發現別人已經做好工具可以用了!!