
SQLD NULL 함정 총정리, NULL 산술·비교·3값 논리, 집계 함수와 COUNT, NOT IN·IN, OUTER JOIN, 정렬, 문자 연결, GROUP BY·UNIQUE·CHECK 속 NULL 핵심 정리
이제 마무리 총정리! 첫 번째는 SQLD에서 가장 많이 틀리는 NULL 함정이야
흩어져 있던 NULL 규칙을 한 페이지로 모아서 마지막 점검해보자
SQLD 기초이론 정리 시리즈 48탄!!!
과목 : 마무리 총정리
세부 영역 : NULL 함정 총정리 (이론 18 · 19 · 21 · 27 · 30 복습)
1. 오늘 사용할 예시 테이블
| ID | 값 |
| 1 | 10 |
| 2 | NULL |
| 3 | 30 |
| 4 | NULL |
▲ T_NULL
2. 연산 · 비교 속 NULL
| 상황 | 결과 | 복습 |
| NULL + 10, NULL * 0 | NULL | 이론 18 |
| 값 = NULL, 값 <> NULL | UNKNOWN → WHERE에서 제외 | 이론 18 |
| 값 IS NULL | ID 2, 4 | 이론 18 |
| FALSE AND UNKNOWN / TRUE OR UNKNOWN | FALSE / TRUE | 이론 18 |
| Oracle 'SQL' || NULL || 'D' | SQLD (NULL은 빈 문자처럼) | 이론 16 |
| Oracle 빈 문자열 '' | NULL로 취급 | 이론 18 |
3. 집계 속 NULL
| SQL | 결과 | 복습 |
| COUNT(*) | 4 | 이론 21 |
| COUNT(값) | 2 | 이론 21 |
| SUM(값) / AVG(값) | 40 / 20 (NULL 제외) | 이론 21 |
| AVG(NVL(값, 0)) | 10 (40 ÷ 4) | 이론 21 |
| GROUP BY 값 | 10 · 30 · NULL → 3그룹 | 이론 22 |
| 조건에 맞는 행이 없을 때 SUM | NULL 1행 | 이론 21 |
4. 서브쿼리 · 조인 · 정렬 속 NULL
| 상황 | 결과 | 복습 |
| 값 IN (10, NULL) | ID 1 (NULL은 영향 없음) | 이론 30 |
| 값 NOT IN (10, NULL) | 0행 (전부 UNKNOWN) | 이론 28 · 30 |
| NOT EXISTS | NULL 영향 없음 | 이론 30 |
| LEFT JOIN 후 짝 없는 쪽 | NULL로 채워짐 | 이론 26 |
| LEFT JOIN 후 WHERE 오른쪽 조건 | NULL 행 제거 → INNER처럼 | 이론 27 |
| Oracle ORDER BY 값 ASC | NULL이 맨 뒤 (가장 큰 값) | 이론 23 |
| SQL Server ORDER BY 값 ASC | NULL이 맨 앞 | 이론 23 |
5. 함수 · 제약조건 속 NULL
| 상황 | 결과 | 복습 |
| NVL(NULL, 0) / NVL2(NULL, 'Y', 'N') | 0 / N | 이론 19 |
| NULLIF(5, 5) / COALESCE(NULL, 7) | NULL / 7 | 이론 19 |
| CASE 값 WHEN NULL THEN … | 절대 매칭 안 됨 → IS NULL로 | 이론 19 |
| UNION 중복 제거 | NULL끼리는 같은 값으로 봄 | 이론 32 |
| UNIQUE 칼럼 | NULL 여러 개 허용 | 이론 46 |
| CHECK (값 > 0) | NULL은 통과 | 이론 46 |
[ 최근 기출 출제 포인트 ]
| 회차 | NULL 관련 출제 포인트 |
| 60회 | NULL 비교 조건 건수, COUNT(*) vs COUNT(칼럼), NOT IN |
| 61회 | NULL 산술, NVL · COALESCE, OUTER JOIN 후 NULL |
| 62회 | NOT IN + NULL, 공집합 집계, NULL 정렬 위치 |
[ 자주 묻는 질문 ]
Q. NULL끼리 같다고 보는 곳과 다르다고 보는 곳이 헷갈려
A. 비교 연산(=)에서는 UNKNOWN, 하지만 GROUP BY · DISTINCT · UNION 같은 "묶기 · 중복 제거"에서는 같은 값으로 봐
Q. 시험장에서 NULL 문제 푸는 순서는?
A. ① NULL이 있는 행에 표시 → ② 그 행이 조건에서 UNKNOWN인지 확인 → ③ 집계면 NULL 빼고 계산, 이 순서로 보면 실수가 줄어
[ 시험 포인트 정리 ]
| 키워드 | 핵심 |
| 산술 | NULL |
| 비교 | UNKNOWN → 제외 |
| 집계 | COUNT(*)만 NULL 셈 |
| NOT IN | NULL 있으면 0행 |
| 묶기 · 중복 제거 | NULL끼리 같은 값 |
| Oracle 정렬 | NULL이 가장 큼 |
[ 기출변형문제 ]
※ 60~62회 출제 포인트와 출제기준을 바탕으로 새로 만든 변형문제야
(위의 T_NULL 테이블, Oracle 기준)
Q1. SELECT COUNT(*), COUNT(값), SUM(값), AVG(값) FROM T_NULL; 의 결과는?
① 4, 2, 40, 20
② 4, 4, 40, 10
③ 2, 2, 40, 20
④ 4, 2, 40, 10
Q2. SELECT 'SQL' || NULL || 'D' FROM DUAL; 의 결과는?
① NULL
② SQLD
③ SQL
④ 오류 발생
Q3. SELECT COUNT(*) FROM T_NULL WHERE 값 NOT IN (10, NULL); 의 결과는?
① 2
② 1
③ 0
④ 4
Q4. SELECT COUNT(*) FROM T_NULL WHERE 값 IN (10, NULL); 의 결과는?
① 2
② 0
③ 4
④ 1
Q5. SELECT CASE 값 WHEN NULL THEN '없음' ELSE '있음' END FROM T_NULL WHERE ID = 2; 의 결과는?
① 있음
② 없음
③ NULL
④ 오류 발생
[ 정답 & 해설 ]
| 문항 | 정답 및 해설 |
| Q1 | ① 전체 4행, NULL 아닌 값 2개, 합 40, 평균 40 ÷ 2 = 20 |
| Q2 | ② Oracle 문자 연결에서 NULL은 빈 문자처럼 처리 → SQLD |
| Q3 | ③ 값 <> NULL이 항상 UNKNOWN이라 0 |
| Q4 | ④ IN은 OR라서 값 = 10인 ID 1만 TRUE → 1 |
| Q5 | ① WHEN NULL은 = 비교라 매칭되지 않아 ELSE '있음' |
다음 글에서는 SQL 결과를 빠르게 추론하는
[이론 49] SQL 결과 추론 요령 총정리
▶ [이론 49] SQL 결과 추론 요령 총정리 보러가기
로 2과목 함정을 한 번에 모아볼게!
▶ SQLD · AI 자격증 스터디 자료 보러가기 (AI DATA 자격증 스터디 클럽)
SQLD 준비하시는 분들 모두 화이팅입니다~~~~~ ^^