ROW LIMITING
절은 SELECT
결과에서 원하는 만큼의 행을 가져오는 데 사용되는 표준 구문입니다. SQLD 시험에서는 전통적인 ROWNUM
과 비교하며, 각 키워드의 정확한 역할과 실행 순서를 묻는 문제가 자주 출제됩니다.
OFFSET n ROWS FETCH FIRST m ROWS ONLY
ORDER BY
절 뒤에 위치해야 합니다.FROM
, WHERE
, GROUP BY
, HAVING
ORDER 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점인 모든 행이 포함되었으므로 추가되는 행은 없습니다.