-
[ORACLE]ROWNUM VS FETCH FIRST ROWS사용법DB 2022. 6. 4. 15:53
회사에서 쿼리를 짜다보면 여러 데이터 중에서 최상단 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/
'DB' 카테고리의 다른 글
[ORACLE]MERGE INTO USING (0) 2022.06.05