드디어 내장함수의 여섯번째 마지막 NULL 관련함수입니다. 하루종일 오라클 함수를 공부하다 보니 머리가 아파 졸리기 시작하니 후딱 마무리 짓고 자러가야겠어요.
NULL 함수는 오라클 기본 사용자인 HR계정의 EMPLOYEES테이블을 이용하였고, 마찬가지로 예제를 통해 정리하도록 하겠습니다. 숫자나 문자는 dual 테이블을 이용했는데 그 이후는 기존 데이터를 사용하는게 아무래도 편하네요.
■ NVL 함수
1. 구문형식
NVL(expr1, expr2)
2. 설명
expr1의 값이 null이면 expr2를 반환하고, null이 아니면 expr1을 반환하는 함수
3. 예제
Q) HR계정의 employees테이블 중 Commission_PCT컬럼은 커미션 비율이 들어있는 컬럼입니다. (판매부서 소속 사원들만 값이 있고, 나머지 타 부서의 사원은 null값으로 입력되어 있음) 모든 사원을 대상으로 특별 보너스를 지급하기로 했는데, 판매부 소속 사원들 중 일부는 커미션을 받고 있기 때문에 이들을 제외하고 보너스를 지급하기로 했습니다. 즉 커미션 금액이 1000달러 미만인 사원에게만 보너서를 지급하기로 결정하고 사원의 명단을 추출하세요.
해결과정) 기존에 사용하던 방식으로 salary에 commission을 곱하여 1000달러가 미만인 대상자를 조회 하였더니 6명밖에 추출이 되지 않았습니다. 이 쿼리문은 판매부를 제외한 다른 부서의 경우 commission이 null값을 가지므로 3번째줄의 조건절 salary*commision_pct의 결과가 null이 되어 커미션이 없는 사원들은 추출대상에서 제외되었습니다. 그래서 이 경우에는 NVL함수를 사용하면 해결 할 수 있습니다.
A) 마지막 조건절에 NVL함수를 사용하면, 커미션이 없어 추출대상에 제외되었던 타 부서 직원들도 명단에 추출되어 보너스를 지급할 수 있게 되었습니다. 사진의 크기를 위해 15명밖에 안 보이지만 총 50명의 인원이 추출된 모습이죠.
■ NVL2 함수
1. 구문형식
NVL2(expr1, expr2, expr3)
2. 설명
expr1의 값이 null이면 expr3를 반환하고, null이 아니면 expr2을 반환하는 함수
3. 예제
NVL2 함수도 이번 예제를 통해 공부한다면 어렵지 않습니다. 간단하게 살펴보자면 맨 처음 commission_pct가 기준이 되어 null값이 아니면 salary를 그대로 출력하고, null값이면 salsary +[salary에 커미션을 곱한금액을 더한 값]을 출력하는거죠. 한번 이대로 테스트 해보면 이해가 바로 될거라 생각합니다.
■ NULLIF 함수
1. 구문형식
NULLIF(expr1, expr2)
2. 설명
expr1과 expr2를 비교하여 둘이 같으면 null값을 반환하고, 같지 않으면 expr1을 반환하는 함수.
3. 예제
위에서 사용했던 NVL함수보다는 살짝 난이도가 쉬운 NULLIF함수의 예제입니다. Employees테이블과 Job_history 테이블의 ID를 뽑아와서 last_name이 서로 같으면 null값을 반환하고 같지 않으면 e.job_id를 추출하는 것이죠. 보기엔 어려워 보이지만 저 쿼리문을 막상 똑같이 실행해보면 바로 이해가 되는 쉬운 함수입니다.
'프로그래밍 > DataBase' 카테고리의 다른 글
MySQL〃 Connection Pool(커넥션풀) 소스코드 (0) | 2016.03.02 |
---|---|
오라클〃[공부]13. 크로스조인, 셀프조인, 세미조인, ANSI조인 (1) | 2015.12.22 |
오라클〃[공부]12. 내부조인, 외부조인 정리 및 제약조건 + 예제 (1) | 2015.12.21 |
오라클〃[공부]11. 서브쿼리(Sub Query) 정리 (0) | 2015.12.21 |
오라클〃[공부]9. Decode 함수와 Case 표현식 (0) | 2015.12.20 |
오라클〃[공부]8. Oracle 변환 내장함수 (0) | 2015.12.20 |
오라클〃[공부]7. Oracle 날짜 내장함수 (0) | 2015.12.20 |
오라클〃[공부]6. Oracle 문자 내장함수 (0) | 2015.12.20 |