이 문제는 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은 왼쪽에 있는 테이블로 오른쪽 테이블의 속성 값을 합쳐 왼쪽 테이블의 속성을 전부 출력하는 것.
문제에서 제시한 조인 방법도 있고, 서브 쿼리를 이용해서 하는 방법도 좋더라고요 !