728x90
반응형

안녕하세요!

오늘은 프로그래머스 SQL 고득점 Kit 중 JOIN 분야의 '있었는데요 없었습니다' 문제 리뷰를 진행하겠습니다.

 

문제는 아래 링크에서 확인해주시면 됩니다.

https://school.programmers.co.kr/learn/courses/30/lessons/59043

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

  • 문제 설명

 

  • 문제

 

  • 예시

 

  • 문제를 파악하여 쿼리 생각하기

예시에서 볼 수 있듯이, 저희가 문제에서 SELECT 해야하는 부분은 동물의

  1. ID: A.ANIMAL_ID
  2. 이름: A.NAME
    → A는 ANIMAL_INS 테이블, B는 ANIMAL_OUTS 테이블을 의미합니다.
    → ID와 이름은 각 테이블에서 같이 포함되어 있기 때문에 어느 테이블에 존재하는지 꼭 명시를 해야합니다.
    → 여기서는 A, B 어느 테이블에 있는 값을 가지고 와도 동일한 값을 SELECT 합니다.

총 2개인 것을 확인할 수 있습니다.

 

다음으로 두 개의 테이블을 JOIN 해야하는 부분은

  1. ANIMAL_INS 테이블과 ANIMAL_OUTS 테이블을 동시에 만족: JOIN ANIMAL_OUTS B
    → 두 테이블을 동시에 만족해야 하기 때문에 내부 조인을 사용하는데, JOIN 혹은 INNER JOIN 으로 표기하시면 됩니다.
    → ANIMAL_OUTS을 FROM에 두고, ANIMAL_INS 테이블로 JOIN을 해도 상관 없습니다.
  2. 두 테이블에서 값이 동일한 컬럼이 기준: ON A.ANIMAL_ID=B.ANIMAL_ID
    → 두 테이블에서 동일한 값이 여러 개 있으나, 문제에서 ANIMAL_OUTS의 ANIMAL_ID는 ANIMAL_INS의 ANIMAL_ID의 외래 키라고 하였기 때문에 ANIMAL_ID로 JOIN하는 것이 좋습니다.
    → NAME, ANIMAL_TYPE 과 같은 값으로 JOIN을 할 경우, 테이블 내에 중복 값으로 인해 원하는 대로 JOIN이 되지 않을 가능성이 높습니다.

위와 같은 것을 확인할 수 있습니다.

 

다음으로 저희가 WHERE 조건으로 확인해야 하는 부분은

  1. 보호 시작일보다 입양일이 더 빠른 동물: A.DATETIME > B.DATETIME

총 1개인 것을 확인할 수 있습니다.

 

마지막으로 저희가 문제에서 확인해야 하는 부분은

  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
반응형

+ Recent posts