728x90
반응형
안녕하세요!
오늘은 프로그래머스 SQL 고득점 Kit 중 JOIN 분야의 '있었는데요 없었습니다' 문제 리뷰를 진행하겠습니다.
문제는 아래 링크에서 확인해주시면 됩니다.
https://school.programmers.co.kr/learn/courses/30/lessons/59043
- 문제 설명
- 문제
- 예시
- 문제를 파악하여 쿼리 생각하기
예시에서 볼 수 있듯이, 저희가 문제에서 SELECT 해야하는 부분은 동물의
- ID: A.ANIMAL_ID
- 이름: A.NAME
→ A는 ANIMAL_INS 테이블, B는 ANIMAL_OUTS 테이블을 의미합니다.
→ ID와 이름은 각 테이블에서 같이 포함되어 있기 때문에 어느 테이블에 존재하는지 꼭 명시를 해야합니다.
→ 여기서는 A, B 어느 테이블에 있는 값을 가지고 와도 동일한 값을 SELECT 합니다.
총 2개인 것을 확인할 수 있습니다.
다음으로 두 개의 테이블을 JOIN 해야하는 부분은
- ANIMAL_INS 테이블과 ANIMAL_OUTS 테이블을 동시에 만족: JOIN ANIMAL_OUTS B
→ 두 테이블을 동시에 만족해야 하기 때문에 내부 조인을 사용하는데, JOIN 혹은 INNER JOIN 으로 표기하시면 됩니다.
→ ANIMAL_OUTS을 FROM에 두고, ANIMAL_INS 테이블로 JOIN을 해도 상관 없습니다. - 두 테이블에서 값이 동일한 컬럼이 기준: ON A.ANIMAL_ID=B.ANIMAL_ID
→ 두 테이블에서 동일한 값이 여러 개 있으나, 문제에서 ANIMAL_OUTS의 ANIMAL_ID는 ANIMAL_INS의 ANIMAL_ID의 외래 키라고 하였기 때문에 ANIMAL_ID로 JOIN하는 것이 좋습니다.
→ NAME, ANIMAL_TYPE 과 같은 값으로 JOIN을 할 경우, 테이블 내에 중복 값으로 인해 원하는 대로 JOIN이 되지 않을 가능성이 높습니다.
위와 같은 것을 확인할 수 있습니다.
다음으로 저희가 WHERE 조건으로 확인해야 하는 부분은
- 보호 시작일보다 입양일이 더 빠른 동물: A.DATETIME > B.DATETIME
총 1개인 것을 확인할 수 있습니다.
마지막으로 저희가 문제에서 확인해야 하는 부분은
- 결과는 보호 시작일이 빠른 순으로 조회: ORDER BY A.DATETIME
총 1개인 것을 확인할 수 있습니다.
- 쿼리 완성하기
이제 위에서 생각한 쿼리를 SQL 실행순서에 맞게 배치해주시면 됩니다.
그렇게 완성된 쿼리는 아래와 같습니다.
SELECT
A.ANIMAL_ID, A.NAME
FROM
ANIMAL_INS A
JOIN
ANIMAL_OUTS B ON A.ANIMAL_ID = B.ANIMAL_ID
WHERE
A.DATETIME > B.DATETIME
ORDER BY
A.DATETIME
궁금한 부분이 있으신 분들은 댓글로 남겨주시면, 답변 드리도록 하겠습니다.
★읽어주셔서 감사합니다★
728x90
반응형
'SQL > 프로그래머스' 카테고리의 다른 글
[SELECT] 서울에 위치한 식당 목록 출력하기 (2) | 2024.09.05 |
---|---|
[GROUP BY] 저자 별 카테고리 매출액 집계하기 (1) | 2024.09.03 |
[GROUP BY] 조건에 맞는 사용자와 총 거래금액 조회하기 (36) | 2024.03.31 |
[SELECT] 3월에 태어난 여성 회원 목록 출력하기 (64) | 2024.03.24 |