이 문제는 JOIN
을 이용하여 풀어야 하는 문제이다.
문제를 보면,
천재지변으로 인해 일부 데이터가 유실되었습니다. 입양을 간 기록은 있는데 보호소에 들어온 기록은 없는 동물의 ID와 이름을 ID 순으로 조회하는 SQL문을 작성해주세요.
SQL문제는 일반적으로 문제를 잘 읽어보면 답을 알 수 있다.
가정은, 일부 데이터가 유실 되었다는 것.
내용은, 입양을 간 기록(ANIMAL_OUTS)
은 있지만 보호소에 들어온 기록(ANIMAL_INS)
이 없다.
기록을 찾으려면, 입양을 간 기록 테이블과 보호소에 들어온 기록 테이블을 JOIN
문을 이용하여 데이터의 차이를 비교하면 된다.
SELECT A.ANIMAL_ID, A.NAME
FROM ANIMAL_OUTS A LEFT JOIN ANIMAL_INS B
ON A.ANIMAL_ID = B.ANIMAL_ID
WHERE B.ANIMAL_ID IS NULL
ORDER BY A.ANIMAL_ID
ANIMAL_OUTS
테이블과 ANIMAL_INS
테이블을 LEFT JOIN
한다, 별칭은 각각 A
와B
로 한다. 출력은 문제에서 제시한 ANIMAL_ID
속성과 NAME
속성을 출력한다.
JOIN의 조건 Key는 각 테이블의 ANIMAL_ID
가 같은 값이다.
단(WHERE)
, B
테이블(ANIMAL_INS)
의 값이 NULL
일 경우만 출력하도록 한다.
즉, 입양을 간 기록과 받은 기록을 합쳐, 받은 기록쪽 테이블의 값이 NULL
인 속성만 출력하는 것.
또한(ORDER BY)
, ANIMAL_ID
속성을 기준으로 정렬 한다.
LEFT JOIN
은 왼쪽에 있는 테이블로 오른쪽 테이블의 속성 값을 합쳐 왼쪽 테이블의 속성을 전부 출력하는 것.
문제에서 제시한 조인 방법도 있고, 서브 쿼리를 이용해서 하는 방법도 좋더라고요 !