본문으로 건너뛰기
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과 누락 데이터 처리 미완료 상태