이제 ROWNUM
을 사용한 행 제한에 대해 설명드리겠습니다.
1. 핵심 원리
ROWNUM은 SQL에서 각 행에 고유한 번호를 부여하는 가상 컬럼입니다. 데이터가 조회되는 순서대로 행 번호를 매기며, 주로 결과 집합에서 특정 수의 행만을 선택할 때 사용됩니다. ROWNUM
은 SELECT
문에서 바로 사용할 수 있으며, WHERE
절과 결합하여 결과 행의 수를 제한할 수 있습니다.
2. 실무에서 쓰이는 이유
실무에서 ROWNUM
은 다음과 같은 이유로 사용됩니다:
- 페이징 처리: 대량의 데이터를 한 번에 조회하는 대신, 특정 수의 행만 가져와 페이징 처리를 할 때 유용합니다.
- 데이터 샘플링: 전체 데이터에서 임의의 몇 개의 행만 선택하여 샘플링할 때 사용할 수 있습니다.
3. 실무에서 구체적으로 사용되는 상황
ROWNUM
은 다음과 같은 상황에서 자주 사용됩니다:
- 상위 N개 레코드 조회: 예를 들어, 상위 5명의 최고 매출 고객을 조회할 때.
- 테스트 데이터 추출: 대량의 데이터셋에서 일부만 추출하여 테스트 데이터로 사용할 때.
예상 상황 예측:
- 예시 1: 특정 제품의 상위 10개 판매 기록을 조회하여 분석할 때.
- 예시 2: 고객 데이터베이스에서 상위 100명의 고객을 추출하여 마케팅 캠페인을 준비할 때.
4. 자주 사용되는 윈도우 방식 및 설명
ROWNUM
자체는 윈도우 함수가 아니지만, 행 번호를 부여하고 특정 수의 행만 선택하는 데 유용합니다. 다만, ROWNUM
과 함께 사용할 때 주의할 점이 몇 가지 있습니다.
ROWNUM <= N
- 설명: 결과 집합에서 상위 N개의 행만 선택합니다.
- 사용 예시:
sql SELECT ROWNUM, empno, ename, job, sal FROM emp WHERE ROWNUM <= 5;
- ORDER BY와의 조합
- 설명:
ROWNUM
은 데이터가 조회되는 순서대로 번호를 매기므로,ORDER BY
절과 함께 사용할 때는 서브쿼리를 활용해야 올바르게 동작합니다. - 사용 예시:
sql SELECT * FROM (SELECT empno, ename, job, sal FROM emp ORDER BY sal DESC) WHERE ROWNUM <= 5;
5. 연습 문제
문제 1:
다음의 테이블에서 상위 10명의 급여를 조회하는 SQL 쿼리를 작성하시오.
- 테이블:
employee
- 열:
empno
,ename
,salary
문제 2:
특정 부서에서 급여가 가장 높은 상위 3명의 직원을 조회하는 SQL 쿼리를 작성하시오.
- 테이블:
employee
- 열:
deptno
,empno
,salary
6. 연습 문제 해답
해답 1:
SELECT *
FROM (SELECT empno, ename, salary
FROM employee
ORDER BY salary DESC)
WHERE ROWNUM <= 10;
해답 2:
SELECT *
FROM (SELECT empno, ename, salary
FROM employee
WHERE deptno = 10
ORDER BY salary DESC)
WHERE ROWNUM <= 3;
7. 응용 문제
문제 1:
각 제품 카테고리별로 판매량이 가장 높은 상위 5개의 제품을 조회하는 SQL 쿼리를 작성하시오.
- 테이블:
product_sales
- 열:
category_id
,product_id
,sales
문제 2:
각 지역에서 매출이 가장 높은 상위 2개의 지점을 조회하는 SQL 쿼리를 작성하시오.
- 테이블:
branch_sales
- 열:
region
,branch_id
,revenue
8. 응용 문제 해답
해답 1:
SELECT *
FROM (SELECT category_id, product_id, sales
FROM product_sales
ORDER BY sales DESC)
WHERE ROWNUM <= 5;
해답 2:
SELECT *
FROM (SELECT region, branch_id, revenue
FROM branch_sales
ORDER BY revenue DESC)
WHERE ROWNUM <= 2;
9. 전자상거래 업계에서의 사용 예시
사용될 수 있는 경우 예측:
- 베스트셀러 제품 분석: 상위 10개의 베스트셀러 제품을 조회하여 트렌드를 파악할 때.
- 고객 기여도 분석: 특정 기간 동안 구매 금액이 가장 높은 상위 100명의 고객을 추출하여 분석할 때.
예상 상황 문제:
- 특정 카테고리에서 상위 5개의 판매 제품을 조회하는 SQL 쿼리를 작성하시오.
- 특정 기간 동안 가장 많이 구매한 상위 10명의 고객을 조회하는 SQL 쿼리를 작성하시오.
SQL 코드 및 시각적 예시
문제 1 SQL 코드:
SELECT *
FROM (SELECT product_id, sales
FROM product_sales
WHERE category_id = 'A'
ORDER BY sales DESC)
WHERE ROWNUM <= 5;
예시 테이블:
product_id | sales |
---|---|
101 | 1000 |
102 | 900 |
103 | 850 |
104 | 800 |
105 | 750 |
문제 2 SQL 코드:
SELECT *
FROM (SELECT customer_id, total_spent
FROM customer_purchases
WHERE purchase_date BETWEEN '2024-01-01' AND '2024-12-31'
ORDER BY total_spent DESC)
WHERE ROWNUM <= 10;
예시 테이블:
customer_id | total_spent |
---|---|
001 | 5000 |
002 | 4500 |
003 | 4000 |
… | … |