이제 FETCH FIRST N ROWS
와 OFFSET
을 사용하여 행을 제한하는 방법에 대해 설명드리겠습니다.
1. 핵심 원리
FETCH FIRST N ROWS ONLY와 OFFSET은 SQL에서 결과 집합의 특정 행만을 선택하여 출력할 수 있도록 해주는 구문입니다. 이는 페이징(paging)을 구현하거나, 특정 범위의 행을 선택할 때 사용됩니다.
2. 실무에서 쓰이는 이유
실무에서 이러한 구문은 다음과 같은 이유로 사용됩니다:
- 페이징 처리: 대규모 데이터를 한 번에 조회하는 대신, 페이지 단위로 데이터를 나눠서 조회할 때 유용합니다.
- 데이터 샘플링: 전체 데이터에서 특정 수의 행만 추출하여 분석이나 테스트에 사용합니다.
3. 실무에서 구체적으로 사용되는 상황
FETCH FIRST N ROWS ONLY
와 OFFSET
은 다음과 같은 상황에서 자주 사용됩니다:
- 상위 N개의 레코드 조회: 예를 들어, 상위 10명의 고객을 조회하거나 상위 5개의 매출 제품을 조회할 때.
- 데이터 페이징: 웹 애플리케이션에서 데이터 목록을 페이지 단위로 나누어 보여줄 때.
예상 상황 예측:
- 예시 1: 가장 많이 판매된 상위 5개의 제품을 조회하여 프로모션을 계획할 때.
- 예시 2: 고객 리스트를 20명씩 나눠서 페이지 단위로 보여줄 때.
4. 자주 사용되는 윈도우 방식 및 설명
이 구문들은 페이징이나 특정 범위의 데이터를 선택할 때 주로 사용됩니다.
FETCH FIRST N ROWS ONLY
- 설명: 결과 집합에서 상위 N개의 행만 선택합니다.
- 사용 예시:
sql SELECT empno, ename, job, sal FROM emp ORDER BY sal DESC FETCH FIRST 4 ROWS ONLY;
OFFSET N ROWS
- 설명: 결과 집합에서 N개의 행을 건너뛰고 그 이후의 행을 선택합니다.
- 사용 예시:
sql SELECT empno, ename, job, sal FROM emp ORDER BY sal DESC OFFSET 5 ROWS;
FETCH FIRST N ROWS WITH TIES
- 설명: 지정된 N개의 행과 같은 값을 가진 다른 행들도 함께 선택합니다.
- 사용 예시:
sql SELECT empno, ename, job, sal FROM emp ORDER BY sal DESC FETCH FIRST 2 ROWS WITH TIES;
OFFSET
과FETCH FIRST
의 조합
- 설명: 특정 위치에서부터 시작하여 일정 수의 행을 선택할 수 있습니다.
- 사용 예시:
sql SELECT empno, ename, job, sal FROM emp ORDER BY sal DESC OFFSET 9 ROWS FETCH FIRST 2 ROWS ONLY;
5. 연습 문제
문제 1:
다음의 테이블에서 상위 5명의 급여를 조회하는 SQL 쿼리를 작성하시오.
- 테이블:
employee
- 열:
empno
,ename
,salary
문제 2:
급여가 가장 높은 상위 20%의 직원을 조회하는 SQL 쿼리를 작성하시오.
- 테이블:
employee
- 열:
empno
,ename
,salary
6. 연습 문제 해답
해답 1:
SELECT empno, ename, salary
FROM employee
ORDER BY salary DESC
FETCH FIRST 5 ROWS ONLY;
해답 2:
SELECT empno, ename, salary
FROM employee
ORDER BY salary DESC
FETCH FIRST 20 PERCENT ROWS ONLY;
7. 응용 문제
문제 1:
각 제품의 판매량에 따라 상위 10개의 제품을 조회하는 SQL 쿼리를 작성하시오.
- 테이블:
product_sales
- 열:
product_id
,product_name
,sales
문제 2:
특정 페이지에서 시작해 상위 20개의 판매 제품을 조회하는 SQL 쿼리를 작성하시오.
- 테이블:
product_sales
- 열:
product_id
,product_name
,sales
8. 응용 문제 해답
해답 1:
SELECT product_id, product_name, sales
FROM product_sales
ORDER BY sales DESC
FETCH FIRST 10 ROWS ONLY;
해답 2:
SELECT product_id, product_name, sales
FROM product_sales
ORDER BY sales DESC
OFFSET 10 ROWS FETCH FIRST 20 ROWS ONLY;
9. 전자상거래 업계에서의 사용 예시
사용될 수 있는 경우 예측:
- 베스트셀러 제품 분석: 상위 10개의 베스트셀러 제품을 조회하여 트렌드를 파악할 때.
- 고객 기여도 분석: 특정 기간 동안 구매 금액이 가장 높은 상위 20%의 고객을 추출하여 분석할 때.
예상 상황 문제:
- 특정 카테고리에서 상위 10개의 판매 제품을 조회하는 SQL 쿼리를 작성하시오.
- 특정 기간 동안 가장 많이 구매한 상위 5명의 고객을 조회하는 SQL 쿼리를 작성하시오.
SQL 코드 및 시각적 예시
문제 1 SQL 코드:
SELECT product_id, product_name, sales
FROM product_sales
ORDER BY sales DESC
FETCH FIRST 10 ROWS ONLY;
예시 테이블:
product_id | product_name | sales |
---|---|---|
101 | Product A | 1000 |
102 | Product B | 900 |
103 | Product C | 850 |
… | … | … |
문제 2 SQL 코드:
SELECT customer_id, total_spent
FROM customer_purchases
ORDER BY total_spent DESC
FETCH FIRST 5 ROWS ONLY;
예시 테이블:
customer_id | total_spent |
---|---|
001 | 5000 |
002 | 4500 |
003 | 4000 |
… | … |