COALESCE, NULLIF와 ISNULL
기본값을 대체하는 방법과 COALESCE와 공급업체별 함수의 차이를 알아봅니다.
COALESCE, NULLIF와 ISNULL은(는) CoddyKit의 무료 SQL Interview Prep 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 SQL Interview Prep 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. SQL Interview Prep 강의에는 총 4개의 강의가 포함되어 있습니다.
NULL 값 대체
이제 NULL을 감지할 수 있으므로, 다음 면접 기술은 NULL을 적절한 기본값으로 대체하는 것입니다. 이를 위한 이식 가능하고 표준적인 도구가 COALESCE입니다.
이와 함께 특정 값을 NULL로 바꾸는 반대 방향의 NULLIF, 그리고 지원자들이 COALESCE와 자주 혼동하는 공급업체별 함수 ISNULL(SQL 서버)과 IFNULL(MySQL)도 살펴봅니다.
특히 인수 개수와 반환 유형에서 각각 어떻게 다른지 정확히 아는 것은 자주 나오는 면접 질문입니다.
COALESCE 기초
COALESCE는 인수를 개수 제한 없이 받을 수 있으며, 왼쪽에서 오른쪽으로 확인하면서 처음 만나는 NULL이 아닌 값을 반환합니다. 모든 인수가 NULL이면 NULL을 반환합니다.
ANSI 표준이며 모든 주요 데이터베이스에서 작동하므로 기본 답변으로 삼아야 합니다. 표시, 계산 또는 그룹화에 사용할 대체값을 제공할 때 사용하십시오.
-- Show 0 instead of NULL for missing bonuses
SELECT name, COALESCE(bonus, 0) AS bonus
FROM employees;
-- Multiple fallbacks, first non-NULL wins
SELECT COALESCE(mobile_phone, home_phone, 'no phone') AS contact
FROM customers;COALESCE의 단락 평가
면접관이 자주 확인하는 세부 사항이 있습니다. COALESCE는 개념적으로 인수를 왼쪽에서 오른쪽으로 평가하고, 처음 NULL이 아닌 값을 만나면 멈춥니다. 따라서 앞선 값으로 결과가 결정되면 뒤에 있는 비용이 큰 표현식은 필요하지 않습니다.
실제로는 일부 엔진의 최적화기가 여전히 값을 즉시 평가할 수 있으므로, 0으로 나누기와 같은 오류를 방지하는 데 이 동작을 의존하지 마십시오. 다만 어떤 값이 선택되는지에 대한 왼쪽에서 오른쪽 순서는 보장됩니다.
-- Prefer the manual override, else the computed value,
-- else a constant default
SELECT COALESCE(manual_price, list_price * 1.1, 9.99) AS price
FROM products;COALESCE와 결과 데이터 유형
미묘한 함정이 있습니다. COALESCE 결과의 데이터 유형은 첫 번째 인수 하나가 아니라 모든 인수를 결합한 유형 우선순위로 결정됩니다. 호환되지 않는 유형을 섞으면 오류가 발생하거나 예상치 않게 값이 잘릴 수 있습니다.
예를 들어 정수 열과 문자열 기본값에 COALESCE를 적용하면 엔진에 따라 실패하거나 암시적으로 형 변환이 일어날 수 있습니다. 면접관은 이를 통해 유형을 고려하는지 확인합니다.
-- Risky: integer column with a string fallback
-- may error or force a cast depending on dialect
SELECT COALESCE(score, 'N/A') FROM tests;
-- Safer: keep the fallback type-compatible, or cast explicitly
SELECT COALESCE(CAST(score AS VARCHAR), 'N/A') FROM tests;ISNULL(SQL 서버)과 COALESCE 비교
SQL 서버에는 ISNULL(expr, replacement)가 있습니다. COALESCE와 비슷해 보이지만 면접관이 즐겨 비교하는 중요한 차이가 있습니다:
- 인수 개수: ISNULL은 정확히 두 개를 받고, COALESCE는 여러 개를 받습니다.
- 반환 유형: ISNULL은 첫 번째 인수의 유형을 사용하므로 대체값이 잘릴 수 있습니다. COALESCE는 결합된 유형 우선순위를 사용합니다.
- 이식성: ISNULL은 SQL 서버에서만 사용할 수 있지만, COALESCE는 ANSI 표준입니다.
소리 내어 말할 권장 답변은 다음과 같습니다: 이식성과 예측 가능한 유형 처리를 위해 COALESCE를 선호합니다.
-- SQL Server: ISNULL may truncate the replacement to
-- the first argument's type (e.g. CHAR(1))
SELECT ISNULL(code, 'UNKNOWN') FROM items;
-- If code is CHAR(1), 'UNKNOWN' becomes 'U'
-- COALESCE picks the wider type and keeps 'UNKNOWN'
SELECT COALESCE(code, 'UNKNOWN') FROM items;IFNULL과 NVL
다른 SQL 방언에는 각각 두 인수를 받는 자체 축약형이 있습니다:
- MySQL / 에스큐라이트:
IFNULL(expr, replacement) - 오라클:
NVL(expr, replacement)및 then/else 방식으로 변형한NVL2
세 함수 모두 두 인수를 받는 COALESCE처럼 동작합니다. MySQL 또는 오라클의 관용 표현을 구체적으로 묻는다면 이를 언급하고, 그렇지 않다면 COALESCE를 사용하십시오.
-- MySQL
SELECT IFNULL(bonus, 0) FROM employees;
-- Oracle
SELECT NVL(bonus, 0) FROM employees;
-- NVL2(bonus, 'has bonus', 'no bonus') -> if/else on NULLNULLIF: 반대 방향의 변환
NULLIF(a, b)는 a = b일 때 NULL을 반환하고, 그렇지 않으면 a를 반환합니다. 이는 의도적으로 NULL을 만드는 함수로, COALESCE와 반대 방향으로 동작합니다.
가장 유명한 용도는 0으로 나누는 상황을 방지하는 것입니다. 분모를 NULLIF(denominator, 0)으로 감싸십시오. 분모가 0이면 제수가 NULL이 되어 전체 나눗셈이 오류를 발생시키는 대신 NULL을 반환합니다.
-- Avoid divide-by-zero: returns NULL instead of erroring
SELECT revenue / NULLIF(orders, 0) AS avg_order_value
FROM daily_stats;
-- NULLIF(5, 5) -> NULL
-- NULLIF(5, 3) -> 5NULLIF와 COALESCE 결합
두 함수는 서로 매우 잘 어울립니다. 면접에서 자주 쓰이는 한 줄 표현은 '주문이 없을 때 0을 표시하는 안전한 나눗셈'입니다. NULLIF로 오류를 피한 다음 COALESCE로 결과 NULL을 대체하십시오.
이 간결한 관용 표현은 한 표현식 안에서 예외 상황 처리와 표시 형식 처리를 모두 수행할 수 있다는 능숙함을 보여 줍니다.
SELECT
COALESCE(revenue / NULLIF(orders, 0), 0) AS avg_order_value
FROM daily_stats;
-- orders = 0 -> NULLIF gives NULL -> division gives NULL
-- -> COALESCE turns it into 0빈 문자열을 NULL로 처리하기
NULLIF의 또 다른 실용적인 용도는 빈 문자열을 NULL로 통합하여 일관되게 대체할 수 있게 만드는 것입니다. 지저분한 데이터에는 NULL과 ''이 섞여 있는 경우가 많으며, 이를 통해 둘을 정규화할 수 있습니다.
이 패턴은 '값이 비어 있으면 NULL로 만든 다음 기본값으로 대체한다'라고 이해하면 됩니다. 빈 값과 누락된 값을 같은 방식으로 처리하려면 어떻게 해야 하는지 묻는 질문에 대한 깔끔하고 이식 가능한 답변입니다.
-- Treat both '' and NULL as missing, default to 'Anonymous'
SELECT COALESCE(NULLIF(TRIM(username), ''), 'Anonymous')
FROM users;심화 예제: 조인 간 대체값 적용
LEFT JOIN 후에는 일치하지 않는 행의 오른쪽 테이블 쪽에 NULL이 생깁니다. COALESCE는 이러한 값을 출력에서 의미 있는 기본값으로 바꿉니다. 이는 보고서 작성에서 매우 흔한 요구 사항입니다.
여기서는 LEFT JOIN 덕분에 주문이 없는 고객도 나타나며, 총액이 NULL이 아닌 0으로 표시됩니다. COALESCE가 조인 내부가 아니라 조인 후에 적용된다고 언급하면 평가 순서를 이해하고 있음을 보여 줄 수 있습니다.
SELECT
c.name,
COALESCE(SUM(o.amount), 0) AS total_spent
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
GROUP BY c.name;
-- Customers with no orders get 0 instead of NULL면접 핵심 포인트
NULL 대체 도구를 요약하면 다음과 같습니다:
- COALESCE(a, b, ...): 처음 만나는 NULL이 아닌 값, 여러 인수, ANSI 표준, 우선순위에 따른 유형 결정. 기본 선택입니다.
- ISNULL / IFNULL / NVL: 두 인수를 받는 공급업체별 축약형입니다. ISNULL은 첫 번째 인수의 유형에 맞추느라 값을 자를 수 있습니다.
- NULLIF(a, b): 두 값이 같을 때 NULL을 반환하며, 0으로 나누는 상황을 방지하고 빈 값을 정규화하는 데 유용합니다.
- 안전하고 표시하기 좋은 나눗셈을 위해
COALESCE(x / NULLIF(y, 0), 0)을 결합하십시오.
먼저 COALESCE를 제시하고, SQL 방언이 정해져 있을 때만 공급업체별 변형을 언급하십시오.
빠른 확인
안전한 나눗셈 표현식을 선택하십시오.
요약
이제 NULL을 대체하고 만들어 낼 수 있습니다:
- COALESCE는 여러 인수 중 처음 만나는 NULL이 아닌 값을 반환하며, 이식 가능한 기본 선택입니다.
- ISNULL(SQL 서버), IFNULL(MySQL), NVL(오라클)은 두 인수를 받는 축약형입니다. ISNULL은 첫 번째 인수의 유형에 맞추느라 값을 자를 수 있습니다.
- NULLIF(a, b)는 두 값이 같을 때 NULL을 반환하므로 0으로 나누는 상황을 방지하고 빈 문자열을 정규화하는 데 적합합니다.
- 이들을 결합하면 안전하고 표시하기 좋은 표현식을 만들고, LEFT JOIN 후의 NULL에 기본값을 지정할 수 있습니다.
마지막 단원: 집계, 조인 및 DISTINCT 안에서 NULL이 동작하는 방식입니다.
자주 묻는 질문
“COALESCE, NULLIF와 ISNULL” 강의는 무료인가요?
네 — “COALESCE, NULLIF와 ISNULL” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 SQL Interview Prep 강의 전체를 잠금 해제할 수 있습니다. SQL Interview Prep 강의에는 총 4개의 강의가 포함되어 있습니다.
“COALESCE, NULLIF와 ISNULL”에서 뭘 배우나요?
기본값을 대체하는 방법과 COALESCE와 공급업체별 함수의 차이를 알아봅니다. 브라우저에서 직접 실행하는 실습 코드로 SQL Interview Prep을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
SQL Interview Prep을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 SQL Interview Prep은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“COALESCE, NULLIF와 ISNULL” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 SQL Interview Prep 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 SQL Interview Prep 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 3값 논리와 UNKNOWN
- IS NULL, IS NOT NULL과 NULL 안전 동등성
- COALESCE, NULLIF와 ISNULL
- 집계, JOIN과 DISTINCT에서의 NULL