Oracle SQL을 다루는 개발자라면 반드시 알아야 할 고급 함수 중 하나가 LNNVL 함수입니다. 이 함수는 일반적인 조건문으로 처리하기 어려운 NULL 값 비교 문제를 해결하는 데 매우 유용합니다. 본 글에서는 ORACLE LNNVL 함수의 정의, 사용법, 예제, 유사 함수와의 비교 등을 통해 실무에서 바로 활용할 수 있도록 정리하였습니다.
LNNVL 함수란?
LNNVL(condition)
은 condition의 결과가 FALSE 또는 UNKNOWN(NULL) 일 경우 TRUE를 반환하고, condition이 TRUE일 경우 FALSE를 반환하는 Oracle SQL 함수입니다.
문법
LNNVL(condition)
※ condition은 Boolean 조건식입니다.
용도
- NULL이 포함된 칼럼의 값을 비교할 때 유용
- WHERE 절에서 복잡한 조건문을 단순하게 처리할 수 있음
- 일반적인 비교 연산자(>, =, <)로는 처리하기 어려운 조건을 해결
LNNVL 함수 사용 예제
1. 기본 사용 예
-- 예제 테이블
CREATE TABLE employees (
id NUMBER,
salary NUMBER
);
-- 데이터 입력
INSERT INTO employees VALUES (1, 5000);
INSERT INTO employees VALUES (2, NULL);
INSERT INTO employees VALUES (3, 3000);
-- salary가 4000보다 작거나 NULL인 데이터를 조회
SELECT *
FROM employees
WHERE LNNVL(salary >= 4000);
설명: salary가 4000보다 작거나 NULL인 데이터만 필터링됩니다. 일반적인 비교 연산자만 사용할 경우 NULL은 무시되지만, LNNVL을 사용하면 의도대로 처리할 수 있습니다.
2. LNNVL을 활용한 조건 분기
-- 직원 급여가 NULL이거나 기준 이하인 경우 특정 작업 수행
SELECT id,
CASE
WHEN LNNVL(salary >= 4000) THEN '조치 필요'
ELSE '정상'
END AS status
FROM employees;
다른 NULL 관련 함수와의 비교
함수명 | 설명 | NULL 처리 방식 | 주요 사용처 |
---|---|---|---|
LNNVL | FALSE 또는 NULL 조건을 TRUE로 반환 | 조건 자체를 부정적으로 평가 | WHERE 절의 NULL 조건 판단 |
NVL | NULL 값을 다른 값으로 대체 | 대체값 제공 | 출력값 대체 |
COALESCE | 여러 인수 중 첫 번째 NOT NULL 값 반환 | 여러 값 중 우선순위 지정 | 우선순위 대체 |
NULLIF | 두 인수가 같으면 NULL 반환 | 비교용 | 조건 비교 |
LNNVL 함수 사용 시 주의사항
- WHERE 절에서만 사용할 수 있으며, SELECT 절에서는 직접 사용할 수 없습니다.
- BOOLEAN 결과가 아닌 조건식은 오류를 발생시킵니다.
- 실제로는 조건을 부정하는 용도로 사용하는 것이기 때문에 명확한 조건의 이해가 필요합니다.
실무 적용 팁
LNNVL은 다음과 같은 상황에서 유용합니다.
- NULL 여부에 따라 조건 분기해야 할 때
- 인덱스를 고려해 NULL-safe 조건 필터링이 필요할 때
- 통계 쿼리나 데이터 품질 검증 시 누락된 데이터 포함 여부를 정확히 파악할 때
결론
LNNVL 함수는 Oracle SQL에서 흔히 간과되지만, NULL 처리에 있어 매우 강력한 도구입니다. 특히 WHERE 절에서 조건식이 NULL일 가능성이 있는 경우 이를 명시적으로 처리함으로써 예기치 않은 결과를 방지할 수 있습니다. 실무에서 다양한 조건 필터링을 정확하게 수행하려면, 이 함수의 활용법을 반드시 숙지해 두는 것이 좋습니다.
출처
- Oracle Database SQL Language Reference - LNNVL (Oracle 공식 문서)
- Oracle LiveSQL 예제 자료: https://livesql.oracle.com/
- 실무 경험 기반 쿼리 테스트 사례
'Database' 카테고리의 다른 글
[ORACLE] INSERT() 기초부터 실전까지 : 초보 개발자를 위한 SQL 가이드 (0) | 2025.06.08 |
---|---|
[ORACLE] SELECT()로 데이터 조회하기 : 실무에서 자주 쓰는 패턴 (0) | 2025.06.08 |
[ORACLE] USER() 함수 개념 정리 및 실습 가이드 (0) | 2025.06.07 |
[ORACLE] UID() 함수로 사용자 추적 로직 구현하기 (0) | 2025.06.07 |
[ORACLE] USERENV() 함수로 접속 정보와 세션 상태 추적하기 (0) | 2025.06.07 |