[SQL 문제 풀이] 오랜 기간 보호한 동물(1)

프로그래머스 (59044)
Stupefyee's avatar
Mar 04, 2025
[SQL 문제 풀이] 오랜 기간 보호한 동물(1)
notion image
notion image

내가 작성한 쿼리

Oracle

SELECT * FROM( SELECT AI.NAME, AI.DATETIME FROM ANIMAL_INS AI -- 동물 보호소에 들어온 동물 정보가 담긴 테이블 LEFT OUTER JOIN ANIMAL_OUTS AO -- 보호소에서 나간 동물 정보가 담긴 테이블 ON AI.ANIMAL_ID = AO.ANIMAL_ID -- ANIMAL_ID를 기준으로 두 테이블 조인 WHERE AO.ANIMAL_ID IS NULL -- 보호소에 들어왔으나 나간 기록이 없는 동물만 선택 (입양되지 않은 동물) ORDER BY AI.DATETIME -- 보호소에 들어온 날짜 오름차순 정렬 (가장 오래된 동물부터) ) WHERE ROWNUM <= 3 -- 상위 3개의 결과만 선택 ;
  • 서브 쿼리를 사용하지 않고 ROWNUM <= 3을 통해 결과를 자르면 정렬 되기전의 결과 3개를 잘라서 정렬함

MySQL

SELECT AI.NAME, AI.DATETIME FROM ANIMAL_INS AI LEFT OUTER JOIN ANIMAL_OUTS AO ON AI.ANIMAL_ID = AO.ANIMAL_ID WHERE AO.ANIMAL_ID IS NULL ORDER BY AI.DATETIME -- 상위 3개의 결과 선택 LIMIT 3 ;
  • 위 N개 결과를 가져오는 함수 LIMIT가 정렬 이후에 실행되기 때문에 서브쿼리 필요 X

차이점

  • 상위 N개 결과를 가져오는 방식, 순서의 차이
    • Oracle
      • ROWNUM <= N 을 사용하여 가져옴
      • WHERE절에서 사용됨 → 정렬보다 먼저 실행됨 → 서브쿼리 활용
    • MySQL
      • LIMIT N 을 사용하여 가져옴
      • 정렬 이후에 실행됨
 
Share article

stupefyee