通用函數的使用
1. NVL(數字|列,預設值):如果顯示數字是null,則使用預設數值表示,如果不為空,則顯示原始值;
資料之中null是無法計算的,因為他是一個無法确定的值,是以它參加數學計算的話結果為null
要求查詢出每個雇員的編号,姓名,職位,雇擁日期,年薪
SELECT empno,ename,job,hiredate,comm,(sal+NVL(comm,0))*12 年薪
FROM emp;
驗證NVL()函數
SELECT NVL(3,2)
FROM dual;
2. NVL2(數字|列,傳回結果1(不為空顯示),傳回結果2(為空顯示)):判斷指定列是否是null,如果不為null則顯示結果1,否則傳回結果2
查詢每個雇員的編号,姓名,年薪,基本工資,獎金
SELECT empno,ename,NVL2(comm,sal+comm,sal)*12 年薪,sal,comm
FROM emp;
3. NULLIF(表達式1,表達式2):比較表達式1和表達式2的結果是否相等,如果相等傳回NULL,如果不等傳回表達式1
1.驗證NULLIF()函數
SELECT NULLIF(1,1),NULLIF(1,2)
FROM dual;
2.驗證NULLIF()函數:比較名字的長度和工作的名字長度是否相等
SELECT empno,ename,job,LENGTH(ename),LENGTH(job),
NULLIF(LENGTH(ename),LENGTH(job)) NULLIF
FROM emp;
4. DECODE(列|值,判斷值1,顯示結果1.判斷值2,顯示結果2.。。。預設值):多值判斷,如果某一個列(或者某一個值)與判斷值相同,則使用指定的顯示結果輸出,如果沒有滿足條件,則顯示預設值:就是哪個條件滿足了,就直接輸出這個條件的顯示結果,否則顯示預設值
驗證DECODE()函數
SELECT
DECODE(2,1,'内容為1',2,'内容為2'),
DECODE(2,1,'内容為1','沒有滿足條件')
FROM dual;
查詢雇員的姓名,職員,基本工資等資訊,但是要求所有的職位資訊都換成中文顯示:
SELECT ename,job,
DECODE(job,'CLERK','業務員',
'SALESMAN','銷售人員',
'MANAGER','經理',
'ANALYST','分析員',
'PRESIDENT','jijie_KING'
) 職位
FROM emp;
5. CASE列|數值WHEN表達式1THEN顯示結果1….ELSE..表達式N…END:用于是吸納多條件判斷,在WHEN之後編寫條件,而在THEN之後編寫條件滿足的顯示操作,如果都不滿足則使用ELSE中的表達式處理:就是說case後面為要比較的列或者數值,when後面跟的是一個比較條件(與case後的列|數值相比較)滿足的話就執行then後面的操作,不滿足就執行else後的操作;
查詢每個雇員姓名,工資,職位,同時顯示新的工資(新的工資标準為:辦事員增加10%,銷售增加、20%,經理增加30%,其他職位增加50%)
SELECT ename, sal,job,
CASE job
WHEN 'CLERK' THEN sal*1.1
WHEN 'SALESMAN' THEN sal*1.2
WHEN 'MANAGER' THEN SAL*1.3
ELSE sal*1.5
END NEWSAL
FROM emp;
6. COALESCE(表達式1,表達式2,。。。。表達式n):将表達式逐個判斷,如果表達式1的内容是null,則顯示表達式2,如果表達式2的内容是null,則顯示表達式3,依次類推,如果表達式n的結果還是null,則傳回null
驗證:
SELECT COALESCE(NULL,'1',NULL,'3')
FROM dual;