(프로그래머스_SQL)오랜기간 보호한 동물(△)

이경영·2024년 2월 7일
0

programmers_sql

목록 보기
3/5

정답

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 문법을 사용하면 간단하게 사용가능하다.

profile
꾸준히

0개의 댓글