일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- Spring
- 자바
- jakarta.mail
- 대분류/중분류/소분류
- 코딩
- 스프링
- 프로그래머스
- ajax
- 다중 카테고리 구현
- js
- 인증코드로 비밀번호 변경 구현
- MySQL
- Level 1
- MVC
- 이메일로 인증코드 전송 구현
- jquery
- 세션
- Spring MVC
- Oracle
- jsp 프로젝트
- SESSION
- Sts
- 오라클
- 고객센터 구현
- java
- jsp
- 일단_해보는거야
- 교보문고 따라하기
- json
- 로그인과 장바구니 구현
감 잃지말고 개발하기
[Oracle] [SQL] [쿼리] [문법] [ROWNUM] [FETCH] 출력되는 행 제한하기 본문
출력되는 행을 제한하는 방법에는 크게 2가지가 있다.
예시 테이블 FOOD_PRODUCT
Column name | Type | Nullable | Description |
PRODUCT_ID | VARCHAR(10) | FALSE | 식품 아이디 |
PRODUCT_NAME | VARCHAR(50) | FALSE | 식품 이름 |
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 테이블에서 식품 아이디, 이름, 분류, 가격을 상단 5개의 행만 출력해 보자.
출력결과
ROWNUM은 PSEUDO COLUMN으로 '가짜의'라는 뜻 그대로 별표(*)로 검색해서는 출력되지 않는 감춰진 칼럼이다.
가짜 칼럼인 ROWNUM을 위의 예제와 같이 WHERE절에 사용해 행 개수를 제한하면,
FOOD_PRODUCT 테이블 전체를 다 읽지 않고 제한한 개수만큼의 행만 읽어 출력한다.
따라서 대용량 테이블의 데이터 상단 행만 잠깐 살펴볼 때 유용하게 사용할 수 있다.
2. TOP-N Query 사용
출력되는 데이터 건수를 제한하기 위해 ROW_LIMITING절을 사용한다.
TOP-N Query는 정렬된 결과로부터 위쪽 또는 아래쪽의 N개의 행을 반환하는 쿼리다.
1. FETCH FIRST N ROWS ONLY
FOOD_PRODUCT 테이블에서 가격이 저렴한 순으로 식품 아이디, 이름, 분류, 가격을 4개의 행으로 제한해 출력해 보자.
출력결과
2. FETCH FIRST N PERCENT ROWS ONLY
FOOD_PRODUCT 테이블에서 가격이 저렴한 식품들 중 20%에 해당하는 식품의 아이디, 이름, 분류, 가격을 출력해 보자.
출력결과
3. WITH TIES 옵션
WITH TIES 옵션을 이용하면 여러 행이 N번째 행의 값과 동일할 때 함께 출력할 수 있다.
다음 예제를 보자.
출력결과
위 예제를 보면 2 ROWS를 사용했기 때문에 2개의 행이 출력될 것 같지만, 실제로는 3개의 행이 출력되었다.
세 번째 행의 PRICE 값이 두 번째 행의 PRICE 값과 동일하기 때문이다.
4. OFFSET 옵션
OFFSET 옵션을 이용하면 출력이 시작되는 행의 위치를 지정할 수 있다.
이때, 출력이 시작되는 행의 위치는 N+1이다.
다음 예제를 보자.
FOOD_PRODUCT 테이블에서 가격이 29번째부터 저렴한 식품들의 아이디, 이름, 분류, 가격을 출력해 보자.
출력결과
위의 결과를 보면,
시작 행인 PRODUCT_ID P0022는 PRICE값이 4700으로 FOOD_PRODUCT 테이블 전체 식품 중에 가격이 29번째(28+1)로 저렴한 식품이며, 이 29번째 행부터 끝까지 결과가 출력되었다.
5. OFFSET + FETCH
FOOD_PRODUCT 테이블에서 가격이 29번째부터 저렴한 식품들의 아이디, 이름, 분류, 가격을 출력하는데, 상단 2개의 행만 출력해 보자.
출력결과
'DB > Oracle' 카테고리의 다른 글
[Oracle][11g] Oracle DB 및 SQL Developer 설치 (0) | 2023.08.12 |
---|---|
[Oracle] [기본] NLS_SESSION_PARAMETERS (0) | 2023.03.13 |
[Oracle] [SQL] [쿼리] [문법] [WHERE절] 문자와 날짜 검색 (0) | 2023.03.13 |
[Oracle] [Windows] [Error] [에러] sqlplus: 명령을 찾을 수 없습니다 해결방법 (0) | 2023.03.04 |
[Oracle] [19c] [수동삭제] 이전에 설치한 Oracle 19c 삭제하는 방법(수동, 완전삭제) (0) | 2023.03.03 |