본문 바로가기

SQL/SQL 예제

[SQL] Part2 DECODE, CASE (IF문 )

반응형

초보자를 위한 SQL 200제의 문제를 바탕으로 작성되었습니다.


 

  • DECODE(컬럼, 조건1, 결과1, 조건2, 결과2, 조건3, 결과3,..., default): 컬럼에 따른 조건i와 결과i을 출력.
SQL 의미
DECODE(COL, A, X, Y) COL= A면 X 출력, 
COL ≠ A면 Y출력
DECODE(COL, A, X, B, Y , default) COL = A면  X출력,
COL = B면 Y출력,
둘 다 아니면 default값 출력

(default는 생략 가능)

 

  • CASE 함수: 특정 값을 원하는 방식으로 변환해서 표현
#형식
CASE 컬럼
	WHEN 조건1 THEN 결과1
	WHEN 조건2 THEN 결과2
	ELSE 결과3
    END;

 

  • DECODE 함수와 CASE함수의 차이점은 DECODE의 경우 등호(=) 비교만 가능하지만, CASE는 등호(=) 비교와 부등호(>=, <=, <, >) 둘 다 가능하다는 것. 

    

 

 

 

[예제34]

1. 부서번호(deptno)가 10이면 300, 20이면 400, 나머지 부서는 0을 출력

select empno, deptno, decode(deptno, 10, 300, 20, 400, 0) as 보너스
	from emp
	order by deptno;

위의 코드를 IF문으로 표현하면 다음과 같다. 

 

    IF deptno = 10 THEN 300

    IF deptno = 20 THEN 400 

    ELSE = 0

 

 

 

2. 사원 번호와 사원 번호가 짝수인지 홀수인지 출력

select empno, mod(empno, 2), decode(mod(empno, 2), 0, '짝수', 1, '홀수') as 홀짝
	from emp;

    IF mod(empno, 2) = 0 THEN '짝수'

    IF mod(empno, 2) = 1 THEN '홀수' 

    ELSE = 0

 

 

 

 

3. 직업이 SALESMAN이면 보너스 5000을 출력하고 나머지 직업은 2000 출력

select ename, job, decode(job, 'SALESMAN', 5000, 2000) as 보너스
	from emp
    order by job;

    IF job = 'SALESMAN' THEN 5000' 

    ELSE = 2000

 


 

 

[예제35]

1. 월급이 300이상이면 500 출력, 2000이상 3000 미만이면 300 출력, 1000이상 2000 미만이면 200출력, 그 외 0 출력.

select ename, job, sal, case when sal >= 3000 then 500
                             when sal >= 2000 then 300
                             when sal >= 1000 then 200
                             else 0 end as 보너스
    from emp
    where job in ('SALESMAN', 'ANALYST');

 

 

 

2. 이름, 직업, 커미션, 보너스를 출력. 여기서 보너스는 커미션이 NULL이면 500을 출력하고 아니면 0 출력.

select ename, job, comm, case when comm is null then 500
                              else 0 end as 보너스
    from emp
    where job in ('SALESMAN', 'ANALYST');

 

 

 

 

 

 

 

 

반응형

'SQL > SQL 예제' 카테고리의 다른 글

[SQL] 원도우 함수(WINDOW FUNCTION)2  (0) 2022.08.13
[SQL] 원도우 함수(WINDOW FUNCTION)1  (0) 2022.08.13
[SQL] Part2 NVL, NVL2 (NULL 값 처리)  (0) 2022.08.09
[SQL] 암시적 형 변환  (0) 2022.08.09
[SQL] Part2 날짜형 데이터  (0) 2022.08.08