본문으로 건너뛰기
SQL 기초집LESSON 15

LEFT JOIN과 누락 데이터 처리

난이도입문 → 초급
예상 시간30분
선수지식이전 강의

15강. LEFT JOIN과 누락 데이터 처리

1. 이번 강의에서 해결할 문제

INNER JOIN으로 랭킹을 만들면 아직 경기하지 않은 신규 플레이어가 사라집니다. 기준 집합을 유지하면서 선택 관계가 없는 경우를 표시합니다.

2. 학습 목표

3. 핵심 개념

LEFT JOIN은 왼쪽 모든 행을 유지하고 오른쪽 일치가 없으면 그 열을 NULL로 채웁니다. 오른쪽 조건을 WHERE에 두면 NULL 행이 제거될 수 있으므로 관계 필터는 ON에 둘지 결과 필터인지 의도적으로 선택합니다.

4. 단계별 SQL 예시

대상 테이블: players, match_results (읽기 전용)
파일 경로: C:\dev\game-ranking-db\sql\15-left-join.sql

sql/15-left-join.sql
SELECT
p.player_id,
p.username,
COUNT(mr.result_id) AS battle_count,
COALESCE(ROUND(AVG(mr.score), 1), 0) AS average_score
FROM players AS p
LEFT JOIN match_results AS mr ON mr.player_id = p.player_id
GROUP BY p.player_id, p.username
ORDER BY battle_count DESC, p.player_id;

SELECT p.username
FROM players AS p
LEFT JOIN match_results AS mr ON mr.player_id = p.player_id
WHERE mr.result_id IS NULL;
PowerShell · 실행 순서
sqlite3 -header -box .\data\game_ranking.db ".read .\sql\15-left-join.sql"

5. 쿼리가 동작하는 이유

players가 왼쪽이므로 모든 플레이어가 최소 한 결과 행에 나타납니다. 일치가 없을 때 COUNT(mr.result_id)는 NULL을 제외해 0이지만 COUNT(*)는 보존된 행을 1로 셀 수 있습니다. 두 번째 쿼리는 오른쪽 키가 NULL인 미참여자만 찾습니다.

6. 자주 하는 실수와 안전한 해결법

7. 직접 실습

8. 이해 점검 질문 3개

9. 핵심 요약

MINI QUIZ

LEFT JOIN과 누락 데이터 처리 미니 퀴즈

선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.

0 / 2
  1. 문제 1“LEFT JOIN과 누락 데이터 처리” 내용을 실제 작업에 적용한 설명으로 가장 알맞은 것은 무엇인가요?
  2. 문제 2‘LEFT JOIN에서 COUNT(*)로 참여 횟수 계산’ 상태에 관한 “LEFT JOIN과 누락 데이터 처리” 본문의 설명으로 가장 알맞은 것은 무엇인가요?
LESSON STATUS

학습을 마쳤나요?

직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.

15강. LEFT JOIN과 누락 데이터 처리 미완료 상태