SQL의 진정한 강력함은 여러 테이블을 하나로 엮어 새로운 통찰을 얻는 JOIN에서 나옵니다. 이번 포스팅에서는 데이터의 선후 관계를 비교하고, 유실된 데이터를 찾아내는 실전 JOIN 기술을 정리했습니다.
RIGHT JOIN + IS NULL)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;
RIGHT JOIN을 사용하여 ANIMAL_OUTS 테이블을 기준으로 합쳤습니다.NULL로 채워진다는 점을 이용해, WHERE I.ANIMAL_ID IS NULL 조건을 걸어 유실된 데이터만 쏙 골라내는 법을 익혔습니다.JOIN + Comparison)SELECT I.ANIMAL_ID, I.NAME
FROM ANIMAL_INS I
JOIN ANIMAL_OUTS O ON I.ANIMAL_ID = O.ANIMAL_ID
WHERE I.DATETIME > O.DATETIME
ORDER BY I.DATETIME ASC;
INNER JOIN을 사용합니다.I.DATETIME)이 입양일(O.DATETIME)보다 더 빠른' 데이터를 찾아 논리적 오류를 점검하는 쿼리를 작성했습니다.없어진 기록 찾기에서 ORDER BY I.ANIMAL_ID로 작성하면 I.ANIMAL_ID는 모두 NULL이기 때문에 정렬이 의미가 없어집니다. 기준 테이블인 O.ANIMAL_ID로 정렬해야 정확한 결과가 나옴을 인지하고 수정했습니다.ANIMAL_ID, NAME, DATETIME이라는 동일한 컬럼명을 가지고 있어, I.와 O.라는 별칭을 붙여주지 않으면 Ambiguous column name 에러가 발생한다는 것을 다시금 체감했습니다.