ROW LIMITING 절 정리

TJK·2025년 8월 22일
0

ROW LIMITING 절 정리 (ANSI SQL 2011 표준)

ROW LIMITING 절은 SELECT 결과에서 원하는 만큼의 행을 가져오는 데 사용되는 표준 구문입니다. SQLD 시험에서는 전통적인 ROWNUM과 비교하며, 각 키워드의 정확한 역할과 실행 순서를 묻는 문제가 자주 출제됩니다.


1. 기본 구문과 실행 순서 (★★★★★)

  • 구문: OFFSET n ROWS FETCH FIRST m ROWS ONLY
  • 위치: ORDER BY 절 뒤에 위치해야 합니다.
  • 실행 순서:
    1. FROM, WHERE, GROUP BY, HAVING
    2. ORDER BY (결과 집합 정렬)
    3. OFFSET (정렬된 결과에서 n개 행을 건너뜀)
    4. FETCH (건너뛴 뒤 m개 행을 가져옴)

2. 주요 키워드 (★★★★★)

키워드의미시험 포인트
OFFSET건너뛸 행의 수를 지정.OFFSET 0은 첫 행부터 시작.
FETCH FIRST가져올 행의 수를 지정.FETCH NEXT와 동일.
WITH TIES마지막 행과 정렬 기준 값이 동일한 행을 모두 포함.페이지네이션에서 동점자 처리.
PERCENT행의 수를 **비율(%)**로 지정.FETCH FIRST 10 PERCENT ONLY

3. DBMS별 문법 (시험 빈출)

DBMS문법특징
OracleOFFSET n ROWS FETCH NEXT m ROWS ONLYANSI 표준 준수 (12c부터)
MySQLLIMIT m OFFSET nLIMIT가 먼저, OFFSET이 나중에 옴.
SQL ServerOFFSET n ROWS FETCH NEXT m ROWS ONLYANSI 표준 준수.

4. SQLD 시험 핵심 포인트

  • OFFSETFETCHORDER BY의 영향을 받기 때문에, ORDER BY 없이 사용하면 예상치 못한 결과를 얻을 수 있습니다.
  • MySQL LIMIT 문법: LIMIT 뒤에 가져올 개수, OFFSET 뒤에 건너뛸 개수를 명시합니다. (LIMITOFFSET의 순서를 헷갈리지 않도록 주의)
  • WITH TIES: 이 옵션이 사용되면 FETCH로 지정한 개수를 초과하여 반환될 수 있다는 점을 기억해야 합니다.

5. 최종 암기 팁

  • OFFSET = **O**mit **F**irst **F**rom **S**tart (시작부터 처음 몇 개를 제외)
  • FETCH = **F**rom **E**xcluded **T**ake **C**ount **H**ere (제외된 곳에서 개수만큼 가져와)
  • TIES = **T**ake **I**n **E**quals **S**cores (동일 점수를 가져와)

실전 기출 문제 스타일

1. 다음 쿼리의 실행 결과는?

SELECT employee_name
FROM employees
ORDER BY salary DESC
OFFSET 5 ROWS FETCH NEXT 5 ROWS ONLY;

A. 연봉이 가장 높은 직원 5명을 제외한 후, 그 다음 5명의 직원이 출력된다.
B. 연봉 순으로 상위 5명의 직원이 출력된다.
C. 연봉 순으로 상위 5명부터 10명까지의 직원이 출력된다.
D. 연봉이 가장 낮은 직원 5명이 출력된다.

2. 다음 중 SQL Server에서 연봉이 10000보다 큰 직원 중 상위 30%를 조회하는 구문은?
A. WHERE salary > 10000 FETCH FIRST 30 PERCENT ONLY;
B. FETCH FIRST 30 PERCENT ONLY FROM employees WHERE salary > 10000;
C. SELECT * FROM employees WHERE salary > 10000 ORDER BY salary DESC FETCH FIRST 30 PERCENT ONLY;
D. LIMIT 30 PERCENT FROM employees WHERE salary > 10000;

3. ORDER BY score DESC로 정렬된 테이블에서 OFFSET 1 ROWS FETCH FIRST 2 ROWS WITH TIES를 실행했을 때, 점수가 90점, 80점, 80점, 70점인 데이터가 있다면 어떤 결과가 나올까? (점수는 중복될 수 있음)
A. 80점, 80점 (총 2명)
B. 80점 (총 1명)
C. 80점, 80점, 70점 (총 3명)
D. 90점, 80점 (총 2명)


정답 및 해설

  • 문제 1 정답: A
    • 해설: OFFSET 5 ROWS는 상위 5명(1위~5위)을 건너뛰고, FETCH NEXT 5 ROWS는 그 다음 5명(6위~10위)을 가져옵니다.
  • 문제 2 정답: C
    • 해설: ROW LIMITING 절은 ORDER BY 뒤에 와야 하며, PERCENTFETCH FIRST와 함께 사용됩니다.
  • 문제 3 정답: A
    • 해설: OFFSET 1 ROWS로 90점짜리를 건너뜁니다. FETCH FIRST 2 ROWS를 실행하면 80점 2명을 가져옵니다. WITH TIES 옵션은 마지막 행(80점)과 동일한 값을 가진 행을 추가로 가져오지만, 이미 80점인 모든 행이 포함되었으므로 추가되는 행은 없습니다.
profile
Hello world!

0개의 댓글