STUDY/SQL

NVL : NULL 값 처리하기

sorrow16 2021. 4. 23. 08:59

 

특정 열의 행에 대한 데이터 값이 없다면 데이터 값은 null이 됩니다. null은 그 자체로 의미가 있는데 '값이 없다'는 것을 나타내는 값입니다. 데이블을 정의할 때 null 값을 가지지 못하도록 지정할 수도 있습니다. 이런 경우를 NOT NULL이라고 합니다.

 

null 값은 다음과 같은 특징이 있습니다.

  • 할당되지 않았거나 알려져 있지 않아 적용이 불가능한 값입니다.
  • 0 이나 공백(space)과는 다릅니다.
  • null 값을 포함하는 산술 연산의 결과는 null입니다.

 

다음 SQL문을 실행해 보겠습니다.

SELECT * FROM employees ORDER BY commission_pct;

 

[실행결과]

 

 

 

commission_pct에 대해 오름차순으로 정렬하여 출력하였습니다. commission_pct 열을 살펴보면 35행까지는 데이터 값이 있지만 36행부터는 데이터 값이 null입니다. 해당 값에 간단한 산술 연산을 적용해 보겠습니다.

 

SELECT salary * commission_pct FROM employees ORDER BY commission_pct;

 

 

 

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;

 

 

 

 

commission_pct 열의 데이터 값이 null이면 1로 치환하는 NVL 함수를 적용한 결과합니다.

NVL 함수는 null 값을 어떤 특정한 값으로 변환하는 데 사용합니다. NVL(commission_pct, 0.5) 처럼 응용하여 사용할 수 있습니다. 비슷한 유형에는 NYL2 함수가 있습니다. NVL2 함수는 NVL(열 이름1, 열 이름2, 열 이름3) 형태로 사용하며, 열 이름 1이 null이 아니면 열 이름2를 출력, null이면 열 이름3을 출력합니다.