NULL: 세 번째 진릿값
NULL의 의미와 NULL이 어떤 값과도 같지 않은 이유(자기 자신과도 같지 않음), 그리고 세 값 논리가 WHERE 절에 미치는 영향을 익힙니다.
NULL: 세 번째 진릿값은(는) CoddyKit의 무료 SQL Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 SQL Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. SQL Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
NULL이란 무엇인가요?
NULL은 알 수 없는 데이터 또는 누락된 데이터를 나타냅니다. 0도 아니고, 빈 문자열도 아니며, 거짓도 아닙니다. 값이 명시적으로 존재하지 않음을 뜻합니다.
NULL은 어떤 것과도 같지 않습니다(자기 자신과도 같지 않습니다)
모두가 자주 헷갈리는 규칙은 다음과 같습니다.
SELECT NULL = NULL; -- NULL (not true!)
SELECT NULL = 0; -- NULL
SELECT NULL = ''; -- NULL
SELECT NULL <> 1; -- NULLIS NULL과 IS NOT NULL 사용하기
NULL인지 확인하려면 특수 조건식 IS NULL과 IS NOT NULL을 사용해야 합니다.
SELECT email FROM users WHERE deleted_at IS NULL; -- active users
SELECT email FROM users WHERE deleted_at IS NOT NULL; -- deleted users세 값 논리
SQL의 불리언 논리에는 THREE가지 값이 있습니다: TRUE, FALSE, UNKNOWN (NULL).
| A | B | A AND B | A OR B |
|---|---|---|---|
| TRUE | NULL | NULL | TRUE |
| FALSE | NULL | FALSE | NULL |
| NULL | NULL | NULL | NULL |
조건식이 NULL인 행은 WHERE가 제거합니다
행에서 WHERE x = 5가 NULL로 평가되면(x가 NULL이므로) 해당 행은 반환되지 않습니다. 조건식이 TRUE인 행만 유지됩니다.
-- Suppose age is NULL for some users:
SELECT * FROM users WHERE age >= 18;
-- Users with NULL age are NOT returned, even though we
-- don't actually know they're under 18.NOT IN의 NULL 함정
하위 질의의 이름 중 하나라도 NULL이면 이 질의는 ZERO개의 행을 반환합니다.
SELECT * FROM users
WHERE name NOT IN (SELECT excluded_name FROM blocklist);
-- If blocklist has a NULL row, the whole NOT IN evaluates to NULL
-- → no rows returned
-- Safer:
SELECT * FROM users u
WHERE NOT EXISTS (
SELECT 1 FROM blocklist b WHERE b.excluded_name = u.name
);COALESCE: NULL을 기본값으로 바꾸기
COALESCE는 NULL이 아닌 첫 번째 인수를 반환합니다.
SELECT id, COALESCE(full_name, email, 'Anonymous') AS display_name
FROM users;
-- If full_name is NULL, use email; if that's NULL too, use 'Anonymous'.NULLIF: 그 반대
NULLIF(a, b)는 a = b일 때 NULL을 반환하고, 그렇지 않으면 a를 반환합니다. ''이나 0 같은 특별한 표시 값을 NULL로 취급할 때 유용합니다.
SELECT NULLIF(price, 0) FROM products;
-- Returns NULL when price is 0, useful for AVG() that should ignore zeros.집계에서의 NULL
집계 함수는(COUNT(*)를 제외하고) NULL 입력을 건너뜁니다.
-- Suppose: prices = [10, 20, NULL, 30]
SELECT COUNT(*) FROM products; -- 4 (counts rows)
SELECT COUNT(price) FROM products; -- 3 (counts non-NULL prices)
SELECT AVG(price) FROM products; -- 20 (60 / 3, not 60 / 4)
SELECT SUM(price) FROM products; -- 60NULL 정렬 순서
기본적으로 PostgreSQL은 오름차순으로 정렬할 때 NULL을 뒤에 배치하고, 내림차순으로 정렬할 때 앞에 배치합니다. 다음과 같이 재정의할 수 있습니다.
SELECT * FROM users ORDER BY last_login_at DESC NULLS LAST;NULL과 빈 문자열 저장하기
각 열에 대해 결정하십시오. ''이 유효한 값인가요? 그렇지 않다면 "값 없음"을 의미하도록 NULL을 사용하십시오. 유효하다면 NULL은 다른 의미를 가집니다(예: "아직 묻지 않음").
일관성을 유지하십시오. 같은 열에서 두 가지를 섞어 사용하지 마십시오.
복습
NULL은 고유한 진릿값입니다.
IS NULL로 확인하고, 절대로= NULL을 사용하지 마십시오- WHERE 필터는 TRUE인 행만 유지합니다
- 집계는 NULL 입력을 건너뜁니다
COALESCE는 유용한 도구입니다
빠른 확인
SELECT NULL = NULL;은 무엇을 반환하나요?
자주 묻는 질문
“NULL: 세 번째 진릿값” 강의는 무료인가요?
네 — “NULL: 세 번째 진릿값” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 SQL Academy 강의 전체를 잠금 해제할 수 있습니다. SQL Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“NULL: 세 번째 진릿값”에서 뭘 배우나요?
NULL의 의미와 NULL이 어떤 값과도 같지 않은 이유(자기 자신과도 같지 않음), 그리고 세 값 논리가 WHERE 절에 미치는 영향을 익힙니다. 브라우저에서 직접 실행하는 실습 코드로 SQL Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
SQL Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 SQL Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“NULL: 세 번째 진릿값” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 SQL Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 SQL Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.