[ORACLE]ROWNUM VS FETCH FIRST ROWS사용법
회사에서 쿼리를 짜다보면 여러 데이터 중에서 최상단 n개를 출력해달라는 요청이 왕왕 있다.
나는 대게 FETCH FIRST ROWS를 사용하는게 편해서 실제 자주 사용하고 있는데,
이번 글에서 ROWNUM 과 FETCH FIRST ROWS를 비교해보겠다.
예시 문제는 프로그래머스를 사용
https://programmers.co.kr/learn/courses/30/lessons/59415
코딩테스트 연습 - 최댓값 구하기
ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디
programmers.co.kr

FROM 절에서 서브쿼리로 ANIMAL_INS 테이블의 DATATIME 내림차순으로 먼저 추출 한 뒤
WHERE절에서 ROWNUM =1 을 사용해서 최상단의 값 1개를 가져오는 방식의 쿼리이다.
만약, SELECT 절 하나에서 WHERE절에서 바로 ROWNUM을 사용한다면 쿼리의 동작 순서 때문에 원하는 조건의 값과 자른 값이 출력될것이다.

SELECT 쿼리의 기본 동작 순서는 [FROM - WHERE - GROUP BY - HAVING - SELECT - ORDER BY ] 이다.
그러므로 위와 같이 쿼리를 작성 시 WHERE 절의 ROWNUM =1 을 실행한 뒤 ORDER BY를 실행하기 때문에 최대값을 가져올 수 없게된다.
SELECT 절을 한번만 사용하고 싶은 경우에 FETCH FIRST ROWS 문법을 사용하면 간단하게 사용가능하다.

위와 같이 FETCH FIRST 1 ROWS ONLY 를 사용하면 한줄로 사용이 가능하다.
FETCH 함수에 대한 내용은 아래 링크를 통해 다양한 설명이 되어있다.
출처 - https://www.oracletutorial.com/oracle-basics/oracle-fetch/