Notice
Recent Posts
Recent Comments
Link
나의 개발일지
[SQL] 조건 표현식 본문
오라클의 조건 처리 구현 방식
- 오라클의 SQL 문 안에서 조건 처리 구현 (IF-THEN-ELSE 논리)
- DECODE 함수
- DECODE는 오라클 8i 이전 버전에서 사용하던 전용 구문
- CASE 표현식
- ANSI SQL
DECODE 함수
- 프로그래밍의 IF-THEN-ELSE 구문과 비슷한 기능을 하는 SQL 함수
- 첫 번째 인수에 해당하는 표현식을 각 search 값과 비교한 후 표현식이 search 값과 동일하면 해당 result 값을 반환
- 기본값(default)은 모든 조건에 맞지 않는 데이터에 적용
- 기본값이 생략되면 모든 search 값을 만족하지 않는 데이터는 NULL 값을 반환
- 구문
DECODE(col|표현식, search1, result1
[, search2, result2,..]
[, default])
- POSITION이 사원이면 5% 인상된 급여, 대리이면 7% 인상, 과장이면 10% 인상된 급여를 반환, 그 외의 직급에 대해서는 인상되지 않은 급여를 반환
SELECT emp_name, position, salary,
DECODE(position, '사원', salary*1.05,
'대리', salary*1.07,
'과장', salary*1.1,
salary) AS "인상된 급여"
FROM y_emp;
- 급여 등급을 반환, 300 미만은 C, 300 이상 600 미만은 B, 600 이상은 A
SELECT emp_id, emp_name, salary,
DECODE(TRUNC(salary/300), 0, 'C',
1, 'B',
'A') AS 급여등급
FROM y_emp;
CASE 표현식
- CASE로 시작하고 END로 종료
- WHEN ... THEN 절의 표현식과 조건이 일치할 경우 결과 반환
- WHEN ... TNEN 쌍은 여러 번 지정 가능
- WHEN 절의 조건에 없고 ELSE 절이 존재하는 경우, ELSE 절의 지정값 반환하고 ELSE 절이 없으면 조건에 일치하지 않는 데이터는 NULL을 반환
- 구문
CASE 표현식 WHEN 비교 표현식1 THEN 결과1
[WHEN 비교 표현식2 THEN 결과2
WHEN 비교 표현식n THEN 결과n
ELSE 결과]
END
- DECODE 함수에서 했던 급여 인상 예제를 CASE 표현식으로 표현
SELECT emp_name, position, salary,
CASE position WHEN '사원' THEN 1.05*salary
WHEN '대리' THEN 1.07*salary
WHEN '과장' THEN 1.10*salary
ELSE salary END AS "인상된 급여"
FROM y_emp;
- 급여의 등급을 반환하는 예제를 CASE 표현식으로 표현
SELECT emp_id, emp_name, salary,
CASE WHEN salary < 300 THEN 'C'
WHEN salary >= 300 AND salary < 600 THEN 'B'
ELSE 'A'
END AS 급여등급
FROM y_emp;
- CASE 표현식을 파이썬 if-else 문과 비교해 보기
- CASE 표현식이 익숙하지 않으면 다른 프로그래밍 언어의 조건문과 비교해서 이해하면 좋을 것 같다.
if salary < 300:
급여등급 = 'C'
elif salary >= 300 and salary < 600:
급여등급 = 'B'
else:
급여등급 = 'A'
'Oracle SQL' 카테고리의 다른 글
[SQL] GROUP BY, 그룹 결과 정렬, HAVING 절 (0) | 2023.04.16 |
---|---|
[SQL] 그룹 함수 (0) | 2023.04.16 |
[SQL] 일반 함수 (0) | 2023.04.14 |
[SQL] 함수의 중첩 (0) | 2023.04.14 |
[SQL] 데이터 유형 변환 함수 (단일 행 함수 4) (1) | 2023.04.09 |
Comments