반응형
- 초보자를 위한 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 |