Oracle-常用通用函數、條件判斷函數和多行函數
本文中用到的表: 
通用函數
通用函數就是可以作用於任何類型的函數(參數類型可以是number或varchar2或date類型)
1)NVL(a,b)
如果a為null值,則取b為返回結果,否則返回a。
2)NVL2(a,b,c)
如果a為null, 則結果為b, 否則結果為c。
3)NULLIF(a,b)
在類型一致的情況下,如果a與b相同,返回NULL,否則返回a。
例如:比較10和10.0是否相同
select NULLIF(10,’10’) from dual; ->錯誤, 類型不一致
條件判斷函數
1)case表達式
case表達式是SQL99標准。一個CASE表達式的默認返回值類型是任何返回值的相容集合類型,但具體情況視其所在語境而定。
如果用在字符串語境中,則返回結果味字符串。如果用在數字語境中,則返回結果為十進制值、實值或整數值。
語法1:
SELECT
case 字段
when 條件1 then 表達式1
when 條件2 then 表達式2
else 表達式n
end
語法2:
SELECT
CASE
WHEN 條件 THEN 表達式1 ELSE 表達式2 END;
范例:
SELECT CASE 1 WHEN 1 THEN ‘one’
WHEN 2 THEN ‘two’ ELSE ‘more’ END; -> 結果為“one”
SELECT CASE WHEN 1>0 THEN ‘true’ ELSE ‘false’ END; -> ‘true’
具體范例: 查詢emp表,將職位是分析員的,工資+1000;職位是經理的,工資+800;職位是其它的,工資+400
select ename “姓名”,job “職位”,sal “漲前工資”,
case job
when ‘ANALYST’ then sal+1000
when ‘MANAGER’ then sal+800
else sal+400
end “漲后工資”
from emp;
T1
2)decode()函數
decode()函數是專屬oracle的語法
語法:
decode(字段,條件1,表達式1,條件2,表達式2,…表達式n)
還是上面那個問題, 現在利用decode()函數來解決:
select ename “姓名”,job “職位”,sal “漲前工資”,
decode(job,’ANALYST’,sal+1000,’MANAGER’,sal+800,sal+400) “漲后工資”
from emp;
結果相同。
多行函數
多行函數:輸入多個參數,或者是內部掃描多次,輸出一個結果,例如:count(*)->(count在計算結果時,掃描了14次呢)
並且注意的是, 在oracle中,多行函數是不會統計null值的。
1)count
范例1:
統計emp表中員工總人數
select count(*) from emp;
*號適用於表字段較少的情況下,如果字段較多,掃描多間多,效率低,項目中提倡使用某一個非null唯一的字段,通常是主鍵
范例2:
統計公司有多少個不重復的部門
select count(distinct deptno) from emp;
2)max和min
想法和count一樣,所以他們也是多行函數啊。
范例1:
查詢員工表中最高工資,最低工資
select max(sal) “最高工資”,min(sal) “最低工資”
from emp;
入職最早,入職最晚員工
select max(hiredate) “最晚入職時間”,min(hiredate) “最早入職時間”
from emp;
3)sum和avg
范例1:
按部門求出該部門平均工資,且平均工資取整數,采用截斷
select deptno “部門編號”,trunc(avg(sal),0) “部門平均工資”
from emp
group by deptno;
(繼續)查詢部門平均工資大於2000元的部門
select deptno “部門編號”,trunc(avg(sal),0) “部門平均工資”
from emp
group by deptno
having trunc(avg(sal),0) > 2000;
單引號與雙引號出現的地方
單引號出現的地方如下:
1)字符串,例如:’hello’
2)日期型,例如:’17-12月-80’
3)to_char/to_date(日期,’YYYY-MM-DD HH24:MI:SS’)
雙引號出現的地方如下:
1)列別名,例如:select ename “姓 名” from emp
2)to_char/to_date(日期,’YYYY”年”MM”月”DD”日” HH24:MI:SS’)‘’號中的英文字符大小寫不敏感
