정답
SELECT * FROM (
SELECT A.NAME , A.DATETIME
FROM ANIMAL_INS A LEFT OUTER JOIN ANIMAL_OUTS B
ON A.ANIMAL_ID=B.ANIMAL_ID
WHERE 1=1
AND B.DATETIME IS NULL
ORDER BY A.DATETIME ASC)
WHERE ROWNUM < 4
왜 전체를 select로 묶는가?
SELECT 쿼리의 기본 동작 순서는 [FROM - WHERE - GROUP BY - HAVING - SELECT - ORDER BY ] 이다.
WHERE절에 있는 ROWNUM을 괄호 내부에 써버리게 되면, ORDER BY 후 ROWNUM이 실행되는것이 아니라 ROWNUM을 한 뒤에 ORDER BY가 실행되게 된다. 그렇기에 ROWNUM을 후 실행으로 만들어주기 위해 전체를 묶어서 ROWNUM을 괄호 밖에서 처리 하는것이다.
또는
마지막에 FETCH FIRST 3 ROWS ONLY 라고 FETCH FIRST ROWS ONLY 문법을 사용하면 간단하게 사용가능하다.