📘 SQLD – NULL 함수 (ISNULL, IFNULL, COALESCE, NULLIF)
1️⃣ NULL이란 무엇인가?
- NULL은 값이 없음을 표시하는 특수한 상태입니다.
- 숫자 0이나 빈 문자열('')과는 명확히 다르며, NULL ≠ 0, NULL ≠ ''입니다 .
- 일반 비교 연산자(=, <, >)로는 비교할 수 없으며, 대신 IS NULL, IS NOT NULL을 사용해야 합니다 .
2️⃣ IS NULL / IS NOT NULL
- NULL 검사 전용: NULL 값이 있는지 여부 확인할 때 사용합니다.
SELECT * FROM 테이블
WHERE column IS NULL; -- NULL인 행만 반환
WHERE column IS NOT NULL; -- NULL이 아닌 행만 반환
3️⃣ NULL 치환 함수
✅ IFNULL(expr, 대체값) — MySQL
SELECT IFNULL(col, 0) FROM 테이블;
- col이 NULL이면 0을 반환, 아니면 col 값을 그대로 반환 .
✅ ISNULL(expr, 대체값) — SQL Server
SELECT ISNULL(col, 0) FROM 테이블;
- SQL Server에서 expr이 NULL일 때 대체값 반환 .
✅ NVL(expr, 대체값) — Oracle
SELECT NVL(col, 0) FROM 테이블;
- Oracle의 NULL치환 함수
4️⃣ COALESCE(expr1, expr2, …)
- 다중 인자를 받고 첫 번째 NOT NULL 값을 반환
- 예: SELECT COALESCE(col1, col2, 0) FROM 테이블;
- ANSI 표준, MySQL·PostgreSQL·SQL Server·Oracle 모두 지원
- ISNULL, IFNULL, NVL과 다르게 가변 인자를 받음.
5️⃣ NULLIF(expr1, expr2)
- 두 인자가 같으면 NULL 반환, 아니면 expr1 반환
SELECT NULLIF(col, '') FROM 테이블;
- expr1 = expr2일 경우 CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END와 같습니다
6️⃣ 비교 테이블
ISNULL(expr, alt) | SQL Server | NULL → alt |
IFNULL(expr, alt) | MySQL | NULL → alt |
NVL(expr, alt) | Oracle | NULL → alt |
COALESCE(...) | ANSI 표준 지원 DBMS 모두 | 첫 번째 NULL 아닌 값 반환 |
NULLIF(a, b) | ANSI 표준 지원 DBMS 모두 | a = b → NULL, else a |
7️⃣ 실무 예시
- NULL 기본값 설정:
SELECT ProductName, IFNULL(UnitsOnOrder, 0) FROM Products;
- COALESCE를 사용한 다중 우선순위 처리:
SELECT COALESCE(col1, col2, '기본값') FROM T;
- 일치 시 NULL로 변환:
SELECT NULLIF(tag, '') AS clean_tag FROM posts;
8️⃣ 팁 정리
- NULL은 비교 불가 → IS NULL / IS NOT NULL 사용
- NULL 치환 함수 종류는 DBMS마다 다름 (IFNULL, ISNULL, NVL)
- COALESCE는 가변 인자 지원 ANSI 표준 함수
- NULLIF로 특정 값 → NULL 변환 가능
- 각 함수의 차이와 지원 범위 확실히 이해
'SQLD > 2과목 : SQL 기본 및 활용' 카테고리의 다른 글
2.6 GROUP BY 절 (0) | 2025.06.24 |
---|---|
2.5 WHERE 절 (1) | 2025.06.24 |
2.3 TRIM 함수 (0) | 2025.06.24 |
2.2 SELECT문 (0) | 2025.06.24 |
2.1 관계형 데이터베이스 (0) | 2025.06.24 |