반응형

p. 245

*NVL(oracle)/ISNULL(mssql) 함수의 특성

- 널 값은 아직 정의되지 않은 값으로 0 또는 공백과 다르다. 0은 숫자이고, 공백은 하나의 문자이다.

- 테이블을 생성할 때 NOT NULL 또는 PRIMARY KEY로 정의되지 않은 모든 데이터 유형은 널 값을 포함할 수 있다.

- 널 값을 포함하는 연산의 경우 결과 값도 널 값이다.

- 결과값을 NULL이 아닌 다른 값을 얻고자 할 때 NVL(oracle)/ISNULL(mssql) 함수를 사용한다. NULL 값의 대상이 숫자 유형 데이터인 경우는 주로 0(Zero)으로, 문자 유형 데이터인 경우는 블랭크보다는 ‘x’ 같이 해당 시스템에서 의미 없는 문자로 바꾸는 경우가 많다.

- NVL 함수를 다중행 함수의 인자로 사용하는 경우는 오히려 불필요한 부하를 발생할 수 있으므로 굳이 NVL 함수를 사용할 필요가 없다. 다중행 함수는 입력 값으로 전체 건수가 NULL 값인 경우만 함수의 결과가 NULL이 나오고 전체 건수 중에서 일부만 NULL인 경우는 다중행 함수의 대상에서 제외한다.(예를 들면 100명 중 10명의 성적이 NULL 값일 때 평균을 구하는 다중행 함수 AVG를 사용하면 NULL값이 아닌 90명의 성적에 대해서 평균값을 구하게 된다.)

 

예제) 급여와 커미션을 포함한 연봉을 계산하면서 NVL 함수의 필요성을 알아 본다.

SELECT ENAME 사원명, SAL 월급, COMM 커미션, (SAL*12) + COMM 연봉A, (SAL*12) + NVL(COMM, 0) 연봉B FROM EMP;

 

 

p. 246

*단일행 NULL 관련 함수의 종류

일반형 함수

함수 설명

NVL(표현식1, 표현식2) /

ISNULL(표현식1, 표현식2)

표현식1의 결과값이 NULL이면 표현식2의 값을 출력한다. , 표현식1과 표현식2의 결과 데이터 타입이 같아야 한다.

NULL 관련 가장 많이 사용되는 함수이므로 상당히 중요하다.

NULLIF(표현식1, 표현식2)

표현식1이 표현식2와 같으면 NULL, 같지 않으면 표현식1을 리턴한다.

COALESCE(표현식1, 표현식2, …)

임의의 개수 표현식에서 NULL이 아닌 최초의 표현식을 나타낸다. 모든 표현식이 NULL이라면 NULL을 리턴한다.

 

 p. 250

*NULL과 공집합

SELECT 1 FROM DUAL WHERE 1 = 2; 와 같은 조건이 대표적인 공집합을 발생시키는 쿼리이며, 위와 같이 조건에 맞는 데이터가 한 건도 없는 경우를 공집합이라고 하고, NULL 데이터와는 또 다르게 이해해야 한다.

 

 p. 252

*NULLIF

EXPR1 EXPR2와 같으면 NULL, 같지 않으면 EXPR1을 리턴한다. 특정 값을 NULL로 대체할 경우에 유용하게 사용할 수 있다.

예제) 사원 테이블에서 MGR 7698이 같으면 NULL, 같지 않으면 MGR을 표시한다.

 

반응형