MySQL과 Oracle은 NULL 값을 다른 값으로 치환하는 함수가 다르며,
동작 방식과 제약 조건도 차이가 있다
NULL 처리 함수는 보고서, 집계, 데이터 표시 등에서 자주 쓰인다
1. MySQL – IFNULL
SELECT IFNULL(name, '없음') FROM user;
동작 원리
- 첫 번째 인자가 NULL이면 두 번째 인자로 대체
- NULL이 아니면 원래 값을 반환
- 두 인자의 데이터 타입이 달라도 자동 형변환이 가능
예시
-- 1) 문자열 예시
SELECT name, IFNULL(name, '이름없음') AS name_checked
FROM user;
-- 2) 숫자 예시
SELECT age, IFNULL(age, 0) AS age_checked
FROM user;
-- 3) 타입 혼합 가능
SELECT IFNULL(salary, '급여정보 없음') FROM employees;
-- salary가 숫자여도 문자열로 변환 후 반환
2. Oracle – NVL
SELECT NVL(name, '없음') FROM user;
동작 원리
- MySQL의 IFNULL과 같은 역할
- 단, 두 인자의 데이터 타입이 반드시 동일해야 함
- 숫자 컬럼에 문자열을 넣으려면 형변환 필요
예시
-- 1) 문자열 예시
SELECT NVL(name, '이름없음') AS name_checked
FROM user;
-- 2) 숫자 예시
SELECT NVL(age, 0) AS age_checked
FROM user;
-- 3) 타입 불일치 → 에러
SELECT NVL(salary, '급여정보 없음') FROM employees;
-- ORA-01722: invalid number (문자열-숫자 혼합 불가)
-- 4) 형변환 후 처리
SELECT NVL(TO_CHAR(salary), '급여정보 없음') FROM employees;
3. 차이점 비교
구분 MySQL – IFNULL Oracle – NVL
| 기본 기능 | NULL → 대체값 반환 | NULL → 대체값 반환 |
| 타입 규칙 | 두 인자의 타입 달라도 자동 변환 | 두 인자의 타입 동일해야 함 |
| 문자열/숫자 혼합 | 가능 | 불가능 (형변환 필요) |
| 표준 함수 | 아님 (MySQL 전용) | 아님 (Oracle 전용) |
4. 실무 활용 팁
- 집계 결과 NULL 방지
-- MySQL
SELECT department_id, IFNULL(SUM(salary), 0) FROM employees GROUP BY department_id;
-- Oracle
SELECT department_id, NVL(SUM(salary), 0) FROM employees GROUP BY department_id;
- 리포트에 공백 대신 표시
-- MySQL
SELECT IFNULL(phone, '-') FROM customers;
-- Oracle
SELECT NVL(phone, '-') FROM customers;
- 타입 혼합 시 Oracle은 TO_CHAR/TO_NUMBER 사용
-- 숫자 + 문자 혼합 출력
SELECT NVL(TO_CHAR(salary), '급여정보 없음') FROM employees;
정리
- MySQL: IFNULL이 더 자유로움 (자동 형변환 지원)
- Oracle: NVL은 엄격, 타입 동일해야 함
- 숫자 ↔ 문자열 변환 시 Oracle은 TO_CHAR, TO_NUMBER를 반드시 사용
'DB' 카테고리의 다른 글
| Oracle DB 실습 – 시퀀스, 트리거, 프로시저, 함수, 인덱스, 실행계획 (4) | 2025.08.18 |
|---|---|
| MySQL Oracle 조건문 /Insert 문/TOP N 행 / 집계문자열 정리 (1) | 2025.08.11 |
| MySQL 과 Oracle 자동 증가(PK) 구현 차이/ LIMIT vs ROWNUM – 결과 제한 처리 (0) | 2025.08.11 |
| 오라클 - SQL 집합 연산자 & DML 정리 (0) | 2025.06.11 |
| 오라클 DB 정리 – 정규화 · 참조 무결성 · 외래키 제약 · ENUM 대체 방법 (0) | 2025.06.11 |