Oracle-常用通用函數、條件判斷函數和多行函數


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’)‘’號中的英文字符大小寫不敏感


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM