본문 바로가기

Database

[Oracle] FETCH 구문 사용하기

 

 

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/