Oracle 12c release부터 사용할 수 있는 구문이다.
다음과 같이 다대일 관계를 형성하고 있는 INVENTORIES 와 PRODUCTS 테이블을 보자
quantity 컬럼에 대해 top-5를 리턴해준다.
SELECT
product_name,
quantity
FROM
inventories
INNER JOIN products
USING(product_id)
ORDER BY
quantity DESC
FETCH NEXT 5 ROWS ONLY;
쓸 수 있는 Option 을 알아보자.
[ OFFSET offset ROWS]
FETCH NEXT [ row_count | percent PERCENT ] ROWS [ ONLY | WITH TIES ]
1. OFFSET 옵션
OFFSET 자리에는 원하는 row limits 갯수를 뽑기 이전에 스킵하고 싶은 row 갯수가 있을 시에 써주면 된다.
OFFSET에 음수가 오는 경우 Oracle은 0으로 인식 / NULL 이 오거나 리턴되는 row 갯수보다 높은 수를 쓸 경우 아무 행도 리턴되지 않는다.
SELECT
product_name,
quantity
FROM
inventories
INNER JOIN products
USING(product_id)
ORDER BY
quantity DESC
OFFSET 10 ROWS
FETCH NEXT 10 ROWS ONLY;
2. ONLY | WITH TIES 옵션
ONLY - 내가 지정한 딱 row limits 갯수만 리턴
WITH TIES - 내가 지정한 row limits 에서 맨 마지막 행과 same sort key인 row들도 줄줄이 보여줌
예를 들어, ONLY 옵션의 경우 다음과 같이 딱 10개의 행을 리턴해준다.
SELECT
product_name,
quantity
FROM
inventories
INNER JOIN products
USING(product_id)
ORDER BY
quantity DESC
FETCH NEXT 10 ROWS ONLY;
WITH TIES 옵션의 경우 맨 마지막 행과 같은 것들도 추가로 보여준다
SELECT
product_name,
quantity
FROM
inventories
INNER JOIN products
USING(product_id)
ORDER BY
quantity DESC
FETCH NEXT 10 ROWS WITH TIES;
3. percent 옵션
아래 예제의 경우 top 5% products 리턴해준다. 그러니깐 총 결과 rows가 몇개냐에 따라 보여주는 갯수가 다름
SELECT
product_name,
quantity
FROM
inventories
INNER JOIN products
USING(product_id)
ORDER BY
quantity DESC
FETCH FIRST 5 PERCENT ROWS ONLY;
The inventories table has 1112 rows, therefore, 5% of 1112 is 55.6 which is rounded up to 56 (rows).
참조 - https://www.oracletutorial.com/oracle-basics/oracle-fetch/
'Database' 카테고리의 다른 글
헷갈릴 수 있는 SQL 실행순서 (0) | 2020.03.05 |
---|---|
[ORACLE] LISTAGG 여러 행을 하나의 컬럼으로 가져오기 (0) | 2020.03.05 |
테이블 복사 / Script를 이용해 특정 계정 다시 초기상태 만들고 데이터 import 해오기 (0) | 2020.02.13 |
SUBSTR, RPAD, CASE AND문 (0) | 2020.01.10 |
분석함수- ORDER BY, PARTITION BY,GROUP BY / IF문(DECODE) / 정렬 OVER (0) | 2020.01.10 |