ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด/DataBase

[SQL] ์˜ค๋ผํด ๋‚ด์žฅ ํ•จ์ˆ˜ - DECODE ํ•จ์ˆ˜์™€ CASE ๋ฌธ ( ๋‹จ์ผํ–‰ ํ•จ์ˆ˜ )

NaNaRin๐Ÿ™ƒ 2021. 3. 3. 16:11

1. DECODE ํ•จ์ˆ˜

- ๊ธฐ์ค€์ด ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋จผ์ € ์ง€์ •ํ•œ ํ›„ ํ•ด๋‹น ๋ฐ์ดํ„ฐ ๊ฐ’์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๊ฒฐ๊ณผ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜

- ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ์‚ฌ์šฉํ•˜๋Š” if ์กฐ๊ฑด๋ฌธ ๋˜๋Š” switch-case ๋ฌธ๊ณผ ์œ ์‚ฌ

- ๋งˆ์ง€๋ง‰์˜ '์œ„ ์กฐ๊ฑด 1~n๊ณผ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ๋ฐ˜ํ™˜ํ•  ๊ฒฐ๊ณผ' ๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด NULL ๋ฐ˜ํ™˜

- ์กฐ๊ฑด๋ณ„๋กœ ๋™์ผํ•œ ์ž๋ฃŒํ˜•์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•จ

sql
๋‹ซ๊ธฐ
DECODE([๊ฒ€์‚ฌ ๋Œ€์ƒ์ด ๋  ์นผ๋Ÿผ or ๋ฐ์ดํ„ฐ / ์—ฐ์‚ฐ์ด๋‚˜ ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ], โ€Œโ€‹โ€‹โ€‹[์กฐ๊ฑด 1], [๋ฐ์ดํ„ฐ๊ฐ€ ์กฐ๊ฑด 1๊ณผ ์ผ์น˜ํ•  ๋•Œ ๋ฐ˜ํ™˜ํ•  ๊ฒฐ๊ณผ], โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹[์กฐ๊ฑด 2], [๋ฐ์ดํ„ฐ๊ฐ€ ์กฐ๊ฑด 2๊ณผ ์ผ์น˜ํ•  ๋•Œ ๋ฐ˜ํ™˜ํ•  ๊ฒฐ๊ณผ], โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€ฆ โ€ฆ โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹[์กฐ๊ฑด n], [๋ฐ์ดํ„ฐ๊ฐ€ ์กฐ๊ฑด n๊ณผ ์ผ์น˜ํ•  ๋•Œ ๋ฐ˜ํ™˜ํ•  ๊ฒฐ๊ณผ], โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹[์œ„ ์กฐ๊ฑด 1~n๊ณผ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ๋ฐ˜ํ™˜ํ•  ๊ฒฐ๊ณผ]) โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹ -- 1. SELECT EMPNO, ENAME, JOB, SAL, โ€Œโ€ŒDECODE(JOB, โ€Œโ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹'MANAGER' , SAL*1.1, โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹'SALESMAN', SAL*1.05, โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹'ANALYST' , SAL, โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹SAL*1.03) AS UPSAL FROM EMP;

  (1) JOB ์ด MANAGER ์ธ ๊ฒฝ์šฐ SAL*1.1์„, SALESMAN ์ธ ๊ฒฝ์šฐ SAL*1.05์„, ANALYST ์ธ ๊ฒฝ์šฐ SAL์„, ๊ทธ ์™ธ์—๋Š” SAL*1.03 ์„ ๋ฐ˜ํ™˜

 

2. CASE ๋ฌธ

- DECODE ํ•จ์ˆ˜์™€ ๊ฐ™์ด ํŠน์ • ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋ฐ˜ํ™˜ํ•  ๋ฐ์ดํ„ฐ๋ฅผ ์„ค์ •ํ•  ๋•Œ ์‚ฌ์šฉ

- ๊ธฐ์ค€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜๋“œ์‹œ ๋ช…์‹œํ•˜๊ณ  ๊ทธ ๊ฐ’์— ๋”ฐ๋ผ ๋ฐ˜ํ™˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ •ํ•˜๋Š” DECODE ํ•จ์ˆ˜์™€ ๋‹ฌ๋ฆฌ CASE๋ฌธ์€ ๊ฐ ์กฐ๊ฑด์— ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์„œ๋กœ ์ƒ๊ด€ ์—†์–ด๋„ ๊ฐ€๋Šฅ

- DECODE ํ•จ์ˆ˜๋Š” ๋ชจ๋‘ CASE ๋ฌธ์œผ๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์ง€๋งŒ CASE ๋ฌธ์€ DECODE ํ•จ์ˆ˜๋กœ ๋ชจ๋‘ ํ‘œํ˜„ํ•  ์ˆ˜ ์—†๋‹ค. CASE ๋ฌธ์˜ ๋ฒ”์šฉ์„ฑ์ด ๋” ๋†’์Œ

- ์กฐ๊ฑด๋ณ„๋กœ ๋™์ผํ•œ ์ž๋ฃŒํ˜•์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•จ

sql
๋‹ซ๊ธฐ
CASE [๊ฒ€์‚ฌ ๋Œ€์ƒ์ด ๋  ์นผ๋Ÿผ or ๋ฐ์ดํ„ฐ / ์—ฐ์‚ฐ์ด๋‚˜ ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ(์„ ํƒ)] โ€Œโ€ŒWHEN [์กฐ๊ฑด 1] THEN [๋ฐ์ดํ„ฐ๊ฐ€ ์กฐ๊ฑด 1๊ณผ ์ผ์น˜ํ•  ๋•Œ ๋ฐ˜ํ™˜ํ•  ๊ฒฐ๊ณผ] โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹WHEN [์กฐ๊ฑด 2] THEN [๋ฐ์ดํ„ฐ๊ฐ€ ์กฐ๊ฑด 2๊ณผ ์ผ์น˜ํ•  ๋•Œ ๋ฐ˜ํ™˜ํ•  ๊ฒฐ๊ณผ] โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€ฆ โ€ฆ โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹WHEN [์กฐ๊ฑด n] THEN [๋ฐ์ดํ„ฐ๊ฐ€ ์กฐ๊ฑด n๊ณผ ์ผ์น˜ํ•  ๋•Œ ๋ฐ˜ํ™˜ํ•  ๊ฒฐ๊ณผ] โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹ELSE [์œ„ ์กฐ๊ฑด 1~n๊ณผ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ๋ฐ˜ํ™˜ํ•  ๊ฒฐ๊ณผ]) END -- 1. SELECT EMPNO, ENAME, JOB, SAL, CASE JOB โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹WHEN 'MANAGER' THEN SAL*1.1 โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹WHEN 'SALESMAN' THEN SAL*1.05 โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹WHEN 'ANALYST' THEN SAL โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹ELSE SAL*1.03 END AS UPSAL FROM EMP; -- 2. ๊ธฐ์ค€ ๋ฐ์ดํ„ฐ ์—†์ด ์กฐ๊ฑด์‹๋งŒ์œผ๋กœ CASE๋ฌธ ์‚ฌ์šฉํ•˜๊ธฐ SELECT EMPNO, ENAME, COMM, CASE WHEN COMM IS NULL THEN 'ํ•ด๋‹น์‚ฌํ•ญ ์—†์Œ' โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹WHEN COMM = 0 THEN '์ˆ˜๋‹น ์—†์Œ' โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹WHEN COMM > 0 THEN '์ˆ˜๋‹น : ' || COMM โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹ELSE SAL*1.03 END AS COMM_TEXT FROM EMP;

  (1) JOB ์ด MANAGER ์ธ ๊ฒฝ์šฐ SAL*1.1์„, SALESMAN ์ธ ๊ฒฝ์šฐ SAL*1.05์„, ANALYST ์ธ ๊ฒฝ์šฐ SAL์„, ๊ทธ ์™ธ์—๋Š” SAL*1.03 ์„ ๋ฐ˜ํ™˜

  (2) COMM ์นผ๋Ÿผ ๊ฐ’์ด NULL์ธ ๊ฒฝ์šฐ, 0์ธ ๊ฒฝ์šฐ, 0์„ ์ดˆ๊ณผํ•  ๊ฒฝ์šฐ ๊ฐ๊ฐ ๋‹ค๋ฅธ ๋ฐ˜ํ™˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์ •