ROW LIMITING 절은 SELECT 결과에서 원하는 만큼의 행을 가져오는 데 사용되는 표준 구문입니다. SQLD 시험에서는 전통적인 ROWNUM과 비교하며, 각 키워드의 정확한 역할과 실행 순서를 묻는 문제가 자주 출제됩니다.
OFFSET n ROWS FETCH FIRST m ROWS ONLYORDER BY 절 뒤에 위치해야 합니다.FROM, WHERE, GROUP BY, HAVINGORDER BY (결과 집합 정렬)OFFSET (정렬된 결과에서 n개 행을 건너뜀)FETCH (건너뛴 뒤 m개 행을 가져옴)| 키워드 | 의미 | 시험 포인트 |
|---|---|---|
OFFSET | 건너뛸 행의 수를 지정. | OFFSET 0은 첫 행부터 시작. |
FETCH FIRST | 가져올 행의 수를 지정. | FETCH NEXT와 동일. |
WITH TIES | 마지막 행과 정렬 기준 값이 동일한 행을 모두 포함. | 페이지네이션에서 동점자 처리. |
PERCENT | 행의 수를 **비율(%)**로 지정. | FETCH FIRST 10 PERCENT ONLY |
| DBMS | 문법 | 특징 |
|---|---|---|
| Oracle | OFFSET n ROWS FETCH NEXT m ROWS ONLY | ANSI 표준 준수 (12c부터) |
| MySQL | LIMIT m OFFSET n | LIMIT가 먼저, OFFSET이 나중에 옴. |
| SQL Server | OFFSET n ROWS FETCH NEXT m ROWS ONLY | ANSI 표준 준수. |
OFFSET과 FETCH는 ORDER BY의 영향을 받기 때문에, ORDER BY 없이 사용하면 예상치 못한 결과를 얻을 수 있습니다.LIMIT 문법: LIMIT 뒤에 가져올 개수, OFFSET 뒤에 건너뛸 개수를 명시합니다. (LIMIT와 OFFSET의 순서를 헷갈리지 않도록 주의)WITH TIES: 이 옵션이 사용되면 FETCH로 지정한 개수를 초과하여 반환될 수 있다는 점을 기억해야 합니다.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명)
OFFSET 5 ROWS는 상위 5명(1위~5위)을 건너뛰고, FETCH NEXT 5 ROWS는 그 다음 5명(6위~10위)을 가져옵니다.ROW LIMITING 절은 ORDER BY 뒤에 와야 하며, PERCENT는 FETCH FIRST와 함께 사용됩니다.OFFSET 1 ROWS로 90점짜리를 건너뜁니다. FETCH FIRST 2 ROWS를 실행하면 80점 2명을 가져옵니다. WITH TIES 옵션은 마지막 행(80점)과 동일한 값을 가진 행을 추가로 가져오지만, 이미 80점인 모든 행이 포함되었으므로 추가되는 행은 없습니다.