프로그래머스 SQL 문제를 푸는 과정에서
ROWNUM을 사용해서 푸는데 FETCH 를 사용해서 푸는 답안이있어 FETCH에 검색해봤다.
내가작성한 쿼리
SELECT
NAME,
DATETIME
FROM
(
SELECT
A.NAME,
A.DATETIME
FROM
ANIMAL_INS A,
ANIMAL_OUTS B
WHERE
A.ANIMAL_ID = B.ANIMAL_ID(+)
AND B.ANIMAL_ID IS NULL
ORDER BY A.DATETIME ASC
)
WHERE ROWNUM < 4
;
ROWNUM을 사용하다보니 SELECT문을 한번더 감싸서 ROWNUM으로 1,2,3등을 추출하였다.
하지만 FETCH 를 사용하니 한번 더 SELECT문을 쓰지않고 바로 1,2,3등을 추출할수 있게 됐다.
SELECT
A.NAME,
A.DATETIME
FROM
ANIMAL_INS A,
ANIMAL_OUTS B
WHERE
A.ANIMAL_ID = B.ANIMAL_ID(+)
AND B.ANIMAL_ID IS NULL
ORDER BY A.DATETIME ASC
FETCH FIRST 3 ROWS ONLY
;
FETCH 절은 오라클12c부터 사용할수 있다고 한다.
FETCH 절 : 행의 수를 한정/제한하는 역할로 부분 범위 처리시에 사용한다.
SELECT * FROM [테이블명]
FETCH FIRST [행의수] ROW ONLY//지정한 숫자가 없다면 1건만 가져온다.
OFFSET offset {ROW | ROWS }
FETCH { FIRST | NEXT } [{ rowcount | percent PERCENT}] {ROW | ROWS} {ONLY | WITH TIES }
OFFSET을 통해 시작 위치를 지정하고 FETCH문을 통해 출력 행의 범위를 지정한다.
'ORACLE' 카테고리의 다른 글
오라클 순번 채번 CONNECT BY LEVEL (0) | 2023.04.12 |
---|---|
ORA-01652 에러 (0) | 2021.10.21 |
ORA-28000 에러 (0) | 2021.07.28 |
DB LINK 생성/삭제 방법 (0) | 2021.07.28 |