💡 아직 입양을 못 간 동물 중, 가장 오래 보호소에 있었던 동물 3마리의 이름과 보호 시작일을 조회하는 SQL문을 작성해주세요. 이때 결과는 보호 시작일 순으로 조회해야 합니다.
테이블 형태
ANIMAL_INS / ANIMAL_OUTS 출력 결과 예시
풀이
SELECT I.NAME, I.DATETIME
FROM ANIMAL_INS AS I
LEFT JOIN ANIMAL_OUTS AS O ON I.ANIMAL_ID = O.ANIMAL_ID WHERE O.ANIMAL_ID IS NULL
ORDER BY I.DATETIME
LIMIT 3
해설
FROM ANIMAL_INS AS I
LEFT JOIN ANIMAL_OUTS AS O ON I.ANIMAL_ID = O.ANIMAL_ID WHERE O.ANIMAL_ID IS NULL
입양을 못 간 동물을 출력해야 한다 → ANIMAL_INS 테이블(I)에만 있는 데이터이다 →테이블(I) 를 기준으로 LEFT JOIN 해야 한다
테이블(I)와 테이블(O)의 공통 컬럼 중 고유값인 동물ID(ANIMAL_ID)를 기준으로 LEFT JOIN 한 뒤, WHERE 문에서 테이블(O)의 동물ID가 NULL이라는 조건을 추가하면 입양을 못 간 동물들만 필터링할 수 있다
JOIN하는 테이블에는 없는 행 찾기 SQL JOIN Visualizer If there is no matching row for the right table in the ON or USING part in a LEFT JOIN, a row with all columns set to NULL is used for the right table. You can use this fact to find rows in a table that have no counterpart in another table:
SELECT left_tbl.*
FROM left_tbl LEFT JOIN right_tbl ON left_tbl.id = right_tbl.id
WHERE right_tbl.id IS NULL;