(Oracle) (SQL) (쿼리) (문법) (ROWNUM) (FETCH) 출력되는 행 제한

  • by

출력되는 행을 제한하는 방법에는 크게 두 가지가 있습니다.

예제 테이블 FOOD_PRODUCT

열 이름 유형 Nullable Description
PRODUCT_ID VARCHAR(10) 거짓 식품 ID
PRODUCT_NAME VARCHAR(50) 거짓 음식 이름
PRODUCT_CD VARCHAR(10) TRUE 식품 코드
CATEGORY VARCHAR(10) TRUE 식품 분류
PRICE NUMBER TRUE 식품 가격

테이블 데이터

아래 표는 모든 열과 ROWNUM을 가격을 중심으로 올림 순서로 나란히 출력하는 모든 데이터 세트입니다.

더 보기

ROWNUM PRODUCT_ID PRODUCT_NAME PRODUCT_CD CATEGORY PRICE
25 P0061 맛있는 미네랄 워터 CD_BR00001 음료 1100년
33 P0081 맛있는 백미 CD_RI00001 1500년
37 P0091 맛있는 포카칩 CD_CK00001 과자 1500년
34 P0082 맛있는 현미 CD_RI00002 1800년
38 P0092 맛있는 고구마 CD_CK00002 과자 1800년
13 P0031 맛있는 참치 CD_CN00001 1800년
40 P0094 맛있는 새우 CD_CK00004 과자 1900년
36 P0084 맛있는 완두콩 CD_RI00004 1900년
39 P0093 맛있는 꿀 버터 칩 CD_CK00003 과자 1950년
35 P0083 맛있는 잡곡밥 CD_RI00003 1950년
14 P0032 맛있는 산마 CD_CN00002 2100
29 P0071 맛있는 미역 CD_SU00001 방송국 2400
31 P0073 맛있는 고기 개장 CD_SU00003 방송국 2450
27 P0063 맛있는 사이다 CD_BR00003 음료 2450
26 P0062 맛있는 콜라 CD_BR00002 음료 2700
30 P0072 맛있는 쇠고기 역 CD_SU00002 방송국 2700
32 P0074 맛있는 김치찌개 CD_SU00004 방송국 2900
16 P0034 맛있는 고등어 CD_CN00004 음료 2950
28 P0064 맛있는 사과 주스 CD_BR00004 음료 3100
17 P0041 맛있는 보리차 CD_TE00001 3400
18 P0042 맛있는 메밀차 CD_TE00002 3500
1 P0001 맛있는라면 CD_ND00001 코튼 3780
2 P0002 맛있는 비빈면 CD_ND00002 코튼 3920
19 P0043 맛있는 아메리카노 CD_TE00003 3950
15 P0033 맛있는 골반 CD_CN00003 3950
11 P0023 맛있는 핫 소스 CD_SC00003 출처 3950
20 P0044 맛있는 라떼 CD_TE00004 4050
9 P0021 맛있는 케첩 CD_SC00001 출처 4500
10 P0022 맛있는 마요네즈 CD_SC00002 출처 4700
5 P0011 맛있는 콩기름 CD_OL00001 식용유 4880
3 P0003 맛있는 차잔 CD_ND00003 코튼 4950
4 P0004 맛있는 짬뽕 CD_ND00004 코튼 4950
7 P0013 맛있는 포도씨 기름 CD_OL00003 식용유 5950
6 P0012 맛있는 올리브 오일 CD_OL00002 식용유 7200
12 P0024 맛있는 칠리소스 CD_SC00004 출처 7950
8 P0014 맛있는 마조유 CD_OL00004 식용유 8950
24 P0054 맛있는 흰김치 CD_KC00004 김치 16950
22 P0052 맛있는 김치 CD_KC00002 김치 17000
23 P0053 맛있는 파김치 CD_KC00003 김치 17500
21 P0051 맛있는 배추김치 CD_KC00001 김치 19000

1. ROWNUM 함수 사용

ROWNUM 함수는 출력되는 데이터에 번호를 매깁니다.

FOOD_PRODUCT 테이블에서 식품 ID, 이름, 분류 및 가격을 위 5개 행만 출력해 봅시다.


출력 결과




ROWNUM은 PSEUDO COLUMN에서 ‘거짓’이라는 의미로

에서 검색해서는 출력되지 않는 숨겨진 칼럼이다.

위의 예와 같이 가짜 열인 ROWNUM을 WHERE 절에 사용하여 행 수를 제한하면, FOOD_PRODUCT 전체 테이블을 읽지 않고제한된 수의 행만 읽고 출력

한다.

따라서 대용량 테이블의 데이터 상단 행만 조금 살펴보면 편리합니다.

2. TOP-N Query 사용

출력되는 데이터의 수를 제한하려면 ROW_LIMITING 절을 사용하십시오.

TOP-N 쿼리는 정렬된 결과에서 위 또는 아래 N 행을 반환하는 쿼리입니다.

1. FETCH FIRST N ROWS ONLY FOOD_PRODUCT 테이블에서


가격이 싼 순서로 식품 ID, 이름, 분류, 가격을 4행으로 제한하여 출력해 보자.




출력 결과

2. FETCH FIRST N PERCENT ROWS ONLY FOOD_PRODUCT 테이블에서 저렴한 식품 중 20%에 해당하는 식품 ID,


이름, 분류, 가격을 출력해 봅시다.



출력 결과


40행의 FOOD_PRODUCT 테이블에서 8행이 출력되었습니다.

3. WITH TIES 옵션 WITH TIES 옵션을 이용하면

여러 행이 N 행의 값과 같으면 함께 출력할 수 있습니다.


다음 예제를 살펴 보겠습니다.




출력 결과

위의 예를 보면 2 ROWS를 사용했기 때문에 2 개의 행이 출력되는 것처럼 보이지만 실제로는 3 개의 행이 출력되었습니다.

이는 세 번째 행의 PRICE 값이 두 번째 행의 PRICE 값과 같기 때문입니다.

4. OFFSET 옵션

OFFSET 옵션을 사용하면 출력이 시작되는 행의 위치를 ​​지정할 수 있습니다.

이때 출력이 시작되는 행의 위치는 N+1입니다.

다음 예제를 살펴 보겠습니다.

FOOD_PRODUCT 테이블에서
가격이 29번째부터 싼 음식 ID,


이름, 분류, 가격을 출력해 봅시다.




출력 결과

위의 결과를 보면,

시작행인 PRODUCT_ID P0022는 PRICE 값이 4700이고, FOOD_PRODUCT 테이블 전체의 식품 중 가격이 29번째(28+1)로 싼 식품이며, 이 29번째 행부터 끝까지 결과가 출력되었다.

5. OFFSET + FETCH FOOD_PRODUCT 테이블에서 가격이 29번째부터 싼 음식 ID,


이름, 분류, 가격을 출력하는데 상단 2행만을 출력해 보자.




출력 결과