SQL 고득점 Kit - 8.14

김동현·2024년 8월 14일

SQL 고득점 Kit

목록 보기
28/56

JOIN - 오랜 기간 보호한 동물(1)

문제

아직 입양을 못 간 동물 중, 가장 오래 보호소에 있었던 동물 3마리의 이름과 보호 시작일을 조회하는 SQL문을 작성해주세요. 이때 결과는 보호 시작일 순으로 조회해야 합니다.

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

1차 풀이

SELECT NAME, DATETIME
FROM ANIMAL_INS  
WHERE ANIMAL_ID NOT IN ( ## 입양 못 간 동물
    SELECT ANIMAL_ID
    FROM ANIMAL_OUTS)
ORDER BY DATETIME
LIMIT 3 ## 가장 오래된 동물 LIMIT 3

리뷰

  • 맨 처음에는 NOT EXISTS를 이용해서 해결하려고 했다. 그 부분에서 에러가 발생하여 이렇게 해도 되나?하고 생각했던 것이 되어 쉽게 풀 수 있었다. (약간의 지씨 도움을 받음 ㅎㅎ...)

2차 풀이

SELECT NAME, DATETIME
FROM ANIMAL_INS b
WHERE NOT EXISTS (
        SELECT a.ANIMAL_ID
        FROM ANIMAL_OUTS a
        WHERE a.ANIMAL_ID = b.ANIMAL_ID)
ORDER BY DATETIME
LIMIT 3

-- 첫 시도
SELECT *
FROM ANIMAL_INS  
WHERE NOT EXISTS (
        SELECT a.ANIMAL_ID
        FROM ANIMAL_OUTS a
        INNER JOIN ANIMAL_INS b
        ON a.ANIMAL_ID = b.ANIMAL_ID)

리뷰

  • 위에서 풀고 다시 도전했는데 맨 처음에는 조인을 이용해서 풀려고 했는데 이용하지 않는 것이 더 빠를 것 같고, 첫 시도에는 값이 안 나오고 NOT을 빼면 값이 나오길래 그 이유를 모르겠다.
  • 결국 서브 쿼리를 WHERE a.ANIMAL_ID = b.ANIMAL_ID에 값으로 나온 것만 진행했는데 나오는 것을 보면 내가 모르는 원리가 있는 것 같다 그것을 공부해야 될 듯.

공부

TIL - Not Exists

GitHub

https://github.com/lasentia/SQL_Study/tree/main/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4/3/59044.%E2%80%85%EC%98%A4%EB%9E%9C%E2%80%85%EA%B8%B0%EA%B0%84%E2%80%85%EB%B3%B4%ED%98%B8%ED%95%9C%E2%80%85%EB%8F%99%EB%AC%BC%EF%BC%881%EF%BC%89

profile
'The best way to get started is to quit talking and begin doing.'

0개의 댓글