특정 열의 행에 대한 데이터 값이 없다면 데이터 값은 null이 됩니다. null은 그 자체로 의미가 있는데 '값이 없다'는 것을 나타내는 값입니다. 데이블을 정의할 때 null 값을 가지지 못하도록 지정할 수도 있습니다. 이런 경우를 NOT NULL이라고 합니다.
null 값은 다음과 같은 특징이 있습니다.
- 할당되지 않았거나 알려져 있지 않아 적용이 불가능한 값입니다.
- 0 이나 공백(space)과는 다릅니다.
- null 값을 포함하는 산술 연산의 결과는 null입니다.
다음 SQL문을 실행해 보겠습니다.
SELECT * FROM employees ORDER BY commission_pct;
[실행결과]
![](https://blog.kakaocdn.net/dn/cSRtqj/btq2NU42hTl/W5s119EeqbkC5kblrGlE8k/img.png)
commission_pct에 대해 오름차순으로 정렬하여 출력하였습니다. commission_pct 열을 살펴보면 35행까지는 데이터 값이 있지만 36행부터는 데이터 값이 null입니다. 해당 값에 간단한 산술 연산을 적용해 보겠습니다.
SELECT salary * commission_pct FROM employees ORDER BY commission_pct;
![](https://blog.kakaocdn.net/dn/bgFhor/btq2TdbsvZl/Lq00Fp1cOKFs3kkwQXr8jk/img.png)
salary * commission_pct는 salary 열과 commission_pct 열을 곱하라는 의미입니다. commission_pct 열의 데이터 값이 null 이 아닐 때는 제대로 계산되지만 null일 대는 null로 처리되었습니다. 경우에 따라 null 값을 다른 값으로 처리해야 할 때가 있습니다. 예를 들어 앞의 예와 같이 salary 열에 모두 곱셈 처리를 하고 싶은데 commission_pct 열의 데이터 값이 null인 데이터는 제대로 계산되지 않습니다. 데이터 값에 null을 곱하면 결과가 null이 되기 때문입니다. 이럴 때는 NYL 함수를 사용합니다.
commission_pct 열의 데이터 값이 null이면 일괄적으로 null 값을 1로 변환하여 salary 열과 곱해보겠습니다.
SELECT salary * NVL(commission_pct, 1) FROM employees ORDER BY commission_pct;
![](https://blog.kakaocdn.net/dn/OQrAI/btq2MO5BW86/EXhYHuzKAVWXdMB0bP3lEK/img.png)
commission_pct 열의 데이터 값이 null이면 1로 치환하는 NVL 함수를 적용한 결과합니다.
NVL 함수는 null 값을 어떤 특정한 값으로 변환하는 데 사용합니다. NVL(commission_pct, 0.5) 처럼 응용하여 사용할 수 있습니다. 비슷한 유형에는 NYL2 함수가 있습니다. NVL2 함수는 NVL(열 이름1, 열 이름2, 열 이름3) 형태로 사용하며, 열 이름 1이 null이 아니면 열 이름2를 출력, null이면 열 이름3을 출력합니다.
'STUDY > SQL' 카테고리의 다른 글
RANK, DENSE_RANK, ROW_NUMBER : 데이터 값에 순위 매기기 (0) | 2021.04.28 |
---|---|
DECODE : 조건 논리 처리하기 (0) | 2021.04.27 |
날짜 및 시간 형식 변환하기(TO_CHAR) (0) | 2021.04.22 |
숫자 형식으로 변환하기(TO_CHAR) (0) | 2021.04.21 |
수동 데이터 타입 변환 (0) | 2021.04.20 |