출력되는 행을 제한하는 방법에는 크게 두 가지가 있습니다.
예제 테이블 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행만을 출력해 보자.
출력 결과