NVL, NVL2 ํจ์๋ ๋ฐ์ดํฐ๊ฐ NULL์ธ ๊ฒฝ์ฐ์ ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ ์ง ์ ํ๋ ํจ์์ ๋๋ค.
ํน์ ์ด ๊ฐ์ด๋ ๋ฐ์ดํฐ ๊ฐ์ ๋ฐ๋ผ์ ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ ์ง ์ ํ ๋๋ DECODE ํจ์ ๋๋ CASE๋ฌธ์ ์ฌ์ฉํฉ๋๋ค.
์ฐ์ DECODEํจ์๋ถํฐ ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
DECODE
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ switch๋ฌธ๊ณผ ๋น์ทํฉ๋๋ค.
DECODE ํจ์๋ ๊ธฐ์ค์ด ๋๋ ๋ฐ์ดํฐ๋ฅผ ๋จผ์ ์ง์ ํ ํ ํด๋น ๋ฐ์ดํฐ ๊ฐ์ ๋ฐ๋ผ ๋ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ๋ด๋ณด๋ด๋ ํจ์์ ๋๋ค.
DECODE( [๊ฒ์ฌ ๋์์ด ๋ ์ด ํน์ ๋ฐ์ดํฐ, ์ฐ์ฐ์ด๋ ํจ์์ ๊ฒฐ๊ณผ ๋ฑ],
[์กฐ๊ฑด1], [๋ฐ์ดํฐ๊ฐ ์กฐ๊ฑด1๊ณผ ์ผ์นํ ๋ ๋ฐํํ ๊ฒฐ๊ณผ],
[์กฐ๊ฑด2], [๋ฐ์ดํฐ๊ฐ ์กฐ๊ฑด2์ ์ผ์นํ ๋ ๋ฐํํ ๊ฒฐ๊ณผ],
...
[์กฐ๊ฑดn], [๋ฐ์ดํฐ๊ฐ ์กฐ๊ฑดn๊ณผ ์ผ์นํ ๋ ๋ฐํํ ๊ฒฐ๊ณผ],
[์ ์กฐ๊ฑด๋ค๊ณผ ์ผ์นํ๋ ๊ฒฝ์ฐ๊ฐ ์์ ๋ ๋ฐํํ ๊ฒฐ๊ณผ]
)
๋ง์ฝ ์กฐ๊ฑด๋ค๊ณผ ์ผ์นํ๋ ๊ฒฝ์ฐ๊ฐ ์์ ๋ ๋ฐํ ๊ฐ์ ์ง์ ํ์ง ์์ผ๋ฉด NULL์ด ๋ฐํ๋ฉ๋๋ค.
์ฌ์ฉ ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ง์ฝ EMP ํ ์ด๋ธ์์ ์ง์ฑ ์ด MANAGER์ธ ์ฌ๋์ ๊ธ์ฌ์ 10ํ๋ก๋ฅผ, SALESMAN์ 5ํ๋ก, ANALYST๋ ๊ทธ๋๋ก, ๋๋จธ์ง๋ 3ํ๋ก๋งํผ ์ธ์์ํจ๋ค๊ณ ํ์ ๋, ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ ์ ์์ต๋๋ค.
SELECT EMPNO, ENAME, JOB, SAL,
DECODE( JOB,
'MANAGER', SAL*1.1,
'SALESMAN', SAL*1.05,
'ANALYST', SAL,
SAL * 1.03) AS UPSAL
FROM EMP;
CASE๋ฌธ
CASE๋ฌธ์ DECODE ํจ์์ ๋ง์ฐฌ๊ฐ์ง๋ก ํน์ ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ฐํํ ๋ฐ์ดํฐ๋ฅผ ์ค์ ํ ๋ ์ฌ์ฉํฉ๋๋ค.
๊ธฐ์ค ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋์ ๋ช ์ํ๊ณ ๊ทธ ๊ฐ์ ๋ฐ๋ผ ๋ฐํ ๋ฐ์ดํฐ๋ฅผ ์ ํ๋ DECODE ํ์์ ๋ฌ๋ฆฌ CASE๋ฌธ์ ๊ฐ ์กฐ๊ฑด์ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ๊ฐ ์๋ก ์๊ด์์ด๋ ๋ฉ๋๋ค.
๋ ๊ธฐ์ค ๋ฐ์ดํฐ ๊ฐ์ = ๋ง๊ณ ๋ >,<๋ฑ ๋ค์ํ ์กฐ๊ฑด์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
(ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ if๋ฌธ๊ณผ ๋น์ทํฉ๋๋ค)
CASE๋ฌธ์ ๊ธฐ๋ณธ ํ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
CASE [๊ฒ์ฌ ๋์์ด ๋ ์ด ํน์ ๋ฐ์ดํฐ, ์ฐ์ฐ์ด๋ ํจ์์ ๊ฒฐ๊ณผ (์ ํ)]
WHEN [์กฐ๊ฑด 1] THEN [์กฐ๊ฑด 1์ ๊ฒฐ๊ณผ๊ฐ์ด true์ผ๋ ๋ฐํํ ๊ฒฐ๊ณผ]
WHEN [์กฐ๊ฑด 2] THEN [์กฐ๊ฑด 2์ ๊ฒฐ๊ณผ๊ฐ์ด true์ผ๋ ๋ฐํํ ๊ฒฐ๊ณผ]
...
WHEN [์กฐ๊ฑด n] THEN [์กฐ๊ฑด n์ ๊ฒฐ๊ณผ๊ฐ์ด true์ผ๋ ๋ฐํํ ๊ฒฐ๊ณผ]
ELSE [์ ์กฐ๊ฑด๋ค์ ํด๋นํ๋ ๊ฒฝ์ฐ๊ฐ ์์ ๋ ๋ฐํํ ๊ฒฐ๊ณผ]
END
์ฌ์ฉ ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
SELECT JOB, SAL,
CASE JOB
WHEN 'MANAGER' THEN SAL * 1.1
WHEN 'SALESMAN' THEN SAL * 1.1
WHEN 'ANALYST' THEN SAL * 1.
ELSE SAL*1.03
END AS UPSAL
FROM EMP;
๊ธฐ์ค ๋ฐ์ดํฐ ์์ด๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
SELECT JOB, SAL,
CASE
WHEN COMM IS NULL THEN 'ํด๋น์ฌํญ ์์'
WHEN COMM =0 THEN '์๋น์์'
END AS COMM_TEXT
FROM EMP;