💡문제 풀이/프로그래머스 - Oracle

없어진 기록 찾기 / 59042

뇌 리셋은 기본이지 2024. 6. 25. 15:01

정보

분류 : JOIN

 

문제

문제링크

 

풀이

풀이 1. JOIN

SELECT O.ANIMAL_ID
     , O.NAME
  FROM ANIMAL_INS        I 
 RIGHT JOIN ANIMAL_OUTS  O
    ON I.ANIMAL_ID = O.ANIMAL_ID
 WHERE I.ANIMAL_ID IS NULL
 ORDER BY O.ANIMAL_ID;

풀이 2. NOT EXISTS

SELECT ANIMAL_ID
     , NAME
  FROM ANIMAL_OUTS O
 WHERE NOT EXISTS (
                    SELECT 1
                      FROM ANIMAL_INS
                     WHERE ANIMAL_ID = O.ANIMAL_ID
                  )
 ORDER BY ANIMAL_ID

풀이 3. 다중행 서브쿼리

SELECT ANIMAL_ID
     , NAME
  FROM ANIMAL_OUTS
 WHERE ANIMAL_ID IN (
                      SELECT ANIMAL_ID
                       FROM ANIMAL_INS
                    )

풀이 4. MINUS

SELECT X.ANIMAL_ID
     , X.NAME
  FROM (
         SELECT ANIMAL_ID
              , NAME
          FROM ANIMAL_OUTS
         MINUS
        SELECT ANIMAL_ID
             , NAME
          FROM ANIMAL_INS
       ) X

 

풀이 내용

풀이 1에 대한 설명 : 유실된 데이터를 찾기 위해선 OUTER JOIN이 필요하다. ANIMAL_INS 테이블 내에 존재하는 ANIMAL_ID 컬럼에 데이터가 없으면 ANIMAL_OUTS 테이블의 ANIMAL_ID와 NAME을 출력해주었다.

 

JOIN 외에도 EXISTS, 다중행 서브쿼리, MINUS을 사용하여 문제를 풀 수 있다.