SQL 문 안에서 IF THEN ELSE 논리를 사용 가능하다.
방법은 2가지 이다.
- CASE 표현식
- DECODE 함수 ( 오라클 전용 )
DECODE 표현식
방법은 2가지 이다.
- CASE 표현식
- DECODE 함수 ( 오라클 전용 )
DECODE 표현식
DECODE (col | expression, search1, result1
[, search2, result2, ..., ]
[, default] )
DECODE 함수는 여러 언어에서 사용되는 IF THEN ELSE 논리와 유사한 방식으로 표현식을 해독 한다.
expression을 각 search 값과 비교한 후 해독하여 expression이 search 값과 동일하면 result 를 반환한다.
기본 값이 생략되면 검색 값에 결과 값과 일치하는 값이 없으므로 NULL 값이 반환 된다.
예 1:
SELECT last_name, job_id, salary,
DECODE( job_id, 'IT_PROG', THEN 1.10*salary,
'ST_CLERK' THEN 1.15*salary,
'SA_REP' THEN 1.20*salary,
salary )
FROM employees;
해석
job_id 값을 확인하여 job_id가 IT_PROG 이면 급여가 10% 인상되고, ST_CLERK 이면 급여가 15% 인상되며, SA_REP 이면 급여가 20% 인상이 된다. 다른 업무에 대한 급여 인상은 없다.
동일한 명령문을 IF THEN ELSE 문과 같은 의사 코드로 표현한다면 아래와 같다.
IF job_id = 'IT_PROG' THEN salary = salary * 1.10
IF job_id = 'ST_CLERK' THEN salary = salary * 1.15
IF job_id = 'SA_REP' THEN salary = salary *1.20
ELSE salary = salary
예 2:
SELECT last_name, job_id, salary,
DECODE( TRUNC( salary/2000, 0 ),
0, 0.00,
1, 0.09,
2, 0.20,
3, 0.30,
4, 0.40,
5, 0.42,
6, 0.44,
0.45 ) TAX_RATE
FROM employees;
WHERE department+id = 80;
해석
급여에 따라 부서 80의 각 사원에 대한 세율이 결정된다.
세율은 다음 표에 표시된 값이 따른다.
$ 0.00 - 1,999.99 00%
$ 2,000.00 - 3,999.99 09%
$ 4,000.00 - 5,999.99 20%
$ 6,000.00 - 7,999.99 30%
$ 8,000.00 - 9,999.99 40%
$ 10,000.00 - 11,999.99 42%
$ 12,200.00 - 13,999.99 44%
$ 14,000.00 or greater 45%
[, search2, result2, ..., ]
[, default] )
DECODE 함수는 여러 언어에서 사용되는 IF THEN ELSE 논리와 유사한 방식으로 표현식을 해독 한다.
expression을 각 search 값과 비교한 후 해독하여 expression이 search 값과 동일하면 result 를 반환한다.
기본 값이 생략되면 검색 값에 결과 값과 일치하는 값이 없으므로 NULL 값이 반환 된다.
예 1:
SELECT last_name, job_id, salary,
DECODE( job_id, 'IT_PROG', THEN 1.10*salary,
'ST_CLERK' THEN 1.15*salary,
'SA_REP' THEN 1.20*salary,
salary )
FROM employees;
해석
job_id 값을 확인하여 job_id가 IT_PROG 이면 급여가 10% 인상되고, ST_CLERK 이면 급여가 15% 인상되며, SA_REP 이면 급여가 20% 인상이 된다. 다른 업무에 대한 급여 인상은 없다.
동일한 명령문을 IF THEN ELSE 문과 같은 의사 코드로 표현한다면 아래와 같다.
IF job_id = 'IT_PROG' THEN salary = salary * 1.10
IF job_id = 'ST_CLERK' THEN salary = salary * 1.15
IF job_id = 'SA_REP' THEN salary = salary *1.20
ELSE salary = salary
예 2:
SELECT last_name, job_id, salary,
DECODE( TRUNC( salary/2000, 0 ),
0, 0.00,
1, 0.09,
2, 0.20,
3, 0.30,
4, 0.40,
5, 0.42,
6, 0.44,
0.45 ) TAX_RATE
FROM employees;
WHERE department+id = 80;
해석
급여에 따라 부서 80의 각 사원에 대한 세율이 결정된다.
세율은 다음 표에 표시된 값이 따른다.
$ 0.00 - 1,999.99 00%
$ 2,000.00 - 3,999.99 09%
$ 4,000.00 - 5,999.99 20%
$ 6,000.00 - 7,999.99 30%
$ 8,000.00 - 9,999.99 40%
$ 10,000.00 - 11,999.99 42%
$ 12,200.00 - 13,999.99 44%
$ 14,000.00 or greater 45%
'[ Programing ] > Database' 카테고리의 다른 글
[SQL] IN 조건 사용 (0) | 2011.07.29 |
---|---|
[SQL] BETWEEN 조건 사용 (0) | 2011.07.28 |
[SQL] 조건 표현식. CASE (0) | 2011.07.28 |
[SQL] 우선순위 규칙 (0) | 2011.07.28 |
[SQL] 명령문 설명 및 구분. (0) | 2011.07.28 |