반응형
https://school.programmers.co.kr/learn/courses/30/lessons/59042
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
데이터 유실 상황에서 입양 기록은 존재하지만 보호소에 들어온 기록이 없는 동물을 찾아야 한다면, SQL의 조인 방식과 조건을 활용해 효율적으로 해결할 수 있습니다. 이번 포스트에서는 RIGHT JOIN을 활용한 쿼리를 작성하고, 이를 단계별로 설명하겠습니다.
문제
- 천재지변으로 인해 일부 데이터가 유실되었습니다. 입양을 간 기록은 있는데, 보호소에 들어온 기록이 없는 동물의 ID와 이름을 ID 순으로 조회하는 SQL문을 작성해주세요.
요구사항 분석
1. 데이터 관계
- 입양 기록은 ANIMAL_OUTS 테이블에 저장.
- 보호소에 들어온 기록은 ANIMAL_INS 테이블에 저장.
- 두 테이블은 ANIMAL_ID를 기준으로 연결됩니다.
2. 유실 데이터 정의
- 입양 기록은 있지만 보호소 기록이 없는 동물:
- ANIMAL_OUTS에는 존재하지만, ANIMAL_INS에 없는 데이터.
- ANIMAL_INS의 해당 ANIMAL_ID 값이 NULL인 경우를 찾으면 됩니다.
3. 출력 요구사항
- ANIMAL_ID와 NAME을 출력.
- ANIMAL_ID를 기준으로 오름차순 정렬.
해결
SELECT B.ANIMAL_ID, B.NAME
FROM ANIMAL_INS A
RIGHT JOIN ANIMAL_OUTS B
ON A.ANIMAL_ID = B.ANIMAL_ID
WHERE A.ANIMAL_ID IS NULL
ORDER BY B.ANIMAL_ID;
- SELECT B.ANIMAL_ID, B.NAME:
- 결과로 출력할 컬럼을 지정합니다: 입양 기록에서 동물의 ID(B.ANIMAL_ID)와 이름(B.NAME).
- FROM ANIMAL_INS A RIGHT JOIN ANIMAL_OUTS B:
- 입양 기록(B)을 기준으로 보호소 기록(A)을 조인합니다.
- RIGHT JOIN을 사용하여 ANIMAL_OUTS에 포함된 모든 데이터가 결과에 포함되며, ANIMAL_INS에 없는 경우 NULL로 표시됩니다.
- ON A.ANIMAL_ID = B.ANIMAL_ID:
- 두 테이블 간 조인 조건을 설정합니다: ANIMAL_ID가 동일한 경우 두 테이블의 데이터를 연결.
- WHERE A.ANIMAL_ID IS NULL:
- 보호소 기록이 없는 데이터(ANIMAL_INS.ANIMAL_ID IS NULL)만 선택합니다.
- ORDER BY B.ANIMAL_ID:
- 결과를 ANIMAL_ID 기준으로 정렬합니다.
핵심 포인트 정리
- RIGHT JOIN:
- 기준 테이블(ANIMAL_OUTS)의 모든 데이터를 포함하면서 조인된 테이블(ANIMAL_INS)에서 없는 데이터를 NULL로 반환.
- IS NULL:
- 보호소 기록이 없는 동물을 필터링하는 데 사용.
- ORDER BY:
- 결과 데이터를 요구사항에 따라 정렬.
이번 쿼리는 데이터 유실 상황에서 보호소 기록이 없는 동물을 찾는 문제를 해결하기 위해 RIGHT JOIN과 IS NULL 조건을 활용했습니다. 이를 통해 데이터를 명확히 필터링하고, 요구된 형식으로 결과를 반환할 수 있습니다.
SQL에서 조인 방식과 조건을 적절히 활용하면 복잡한 문제도 효과적으로 해결할 수 있습니다.
반응형
'SQL' 카테고리의 다른 글
| [SQL/프로그래머스] LV3. 배송 예정일 예측 성공과 실패 (2) | 2024.12.21 |
|---|---|
| [SQL/프로그래머스] LV2. 상품 별 오프라인 매출 구하기 (1) | 2024.12.05 |
| [SQL/solvesql] LV3. 작품이 없는 작가 찾기 (4) | 2024.12.05 |
| [SQL/solvesql] LV2. 다음날도 서울숲의 미세먼지 농도는 나쁨 😢 (6) | 2024.11.15 |
| [SQL/solvesql] sql 입문자를 위한 데이터 조회 및 정렬 (4) | 2024.11.14 |