MySQL에서 LIMIT은 조회하고자 하는 레코드의 개수를 지정하는 반면, OFFSET은 지정된 위치+1번째부터 레코드를 반환합니다. 즉, OFFSET 값이 3이면 4번째 레코드부터 결과를 가져오게 됩니다.
이 두 절을 함께 사용하면 페이징 처리나 특정 범위의 데이터 조회에 매우 유용합니다. 실제 예제를 통해 동작 방식을 살펴보겠습니다.
1. 테이블 생성
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable
-> (
-> Name varchar(100)
-> );
Query OK, 0 rows affected (1.33 sec)
2. 데이터 삽입
INSERT 명령어를 사용해 테이블에 여러 레코드를 추가합니다.
mysql> insert into DemoTable values('John');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('Chris');
Query OK, 1 row affected (0.27 sec)
mysql> insert into DemoTable values('David');
Query OK, 1 row affected (0.27 sec)
mysql> insert into DemoTable values('Bob');
Query OK, 1 row affected (0.26 sec)
mysql> insert into DemoTable values('Sam');
Query OK, 1 row affected (0.22 sec)
mysql> insert into DemoTable values('Mike');
Query OK, 1 row affected (0.59 sec)
mysql> insert into DemoTable values('Carol');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('Robert');
Query OK, 1 row affected (0.60 sec)3. 전체 레코드 확인
SELECT 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select *from DemoTable;
출력 결과
+--------+
| Name |
+--------+
| John |
| Chris |
| David |
| Bob |
| Sam |
| Mike |
| Carol |
| Robert |
+--------+
8 rows in set (0.00 sec)
총 8개의 레코드가 저장되어 있습니다.
4. LIMIT과 OFFSET 함께 사용하기
다음은 LIMIT과 OFFSET을 단일 쿼리에서 함께 사용하는 예시입니다.
mysql> select *from DemoTable limit 4 offset 3;
출력 결과
+-------+
| Name |
+-------+
| Bob |
| Sam |
| Mike |
| Carol |
+-------+
4 rows in set (0.00 sec)
결과 분석
위 쿼리에서 limit 4는 4개의 레코드만 가져오도록 지정하고, offset 3은 앞의 3개 레코드(John, Chris, David)를 건너뛰도록 합니다. 따라서 4번째 레코드인 'Bob'부터 시작하여 'Sam', 'Mike', 'Carol'까지 총 4개의 레코드가 반환됩니다.
참고로 LIMIT 3, 4와 같이 콤마를 사용한 표기법도 있으며, 이 경우 앞의 숫자는 OFFSET, 뒤의 숫자는 LIMIT을 의미합니다. 대량의 데이터를 페이지 단위로 나누어 보여주는 게시판이나 목록 화면을 구현할 때 LIMIT과 OFFSET 조합은 필수적인 기법입니다.