MySQL에서 처음 N개의 결과 건너뛰기
MySQL에서 SELECT 쿼리 결과 중 처음 N개의 레코드를 건너뛰고 싶다면 OFFSET을 사용하면 됩니다. LIMIT 절과 함께 OFFSET을 지정하면 앞부분의 행을 원하는 만큼 제외하고 그 이후의 결과만 조회할 수 있습니다.
먼저 예제에 사용할 테이블을 생성해 보겠습니다.
mysql> create table DemoTable
(
Name varchar(40)
);
Query OK, 0 rows affected (0.63 sec)
insert 명령을 사용하여 테이블에 몇 개의 레코드를 삽입합니다.
mysql> insert into DemoTable values('Chris');
Query OK, 1 row affected (0.22 sec)
mysql> insert into DemoTable values('Robert');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('Mike');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values('Bob');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values('David');
Query OK, 1 row affected (0.11 sec)select 문으로 테이블의 전체 레코드를 확인합니다.
mysql> select *from DemoTable;
실행하면 다음과 같은 출력 결과가 나타납니다.
+--------+
| Name |
+--------+
| Chris |
| Robert |
| Mike |
| Bob |
| David |
+--------+
5 rows in set (0.00 sec)
현재 테이블에는 총 5개의 레코드가 저장되어 있습니다. 이제 처음 N개의 결과를 건너뛰는 쿼리를 살펴보겠습니다.
mysql> select *from DemoTable LIMIT 100 offset 3;
실행 결과는 다음과 같습니다.
+-------+
| Name |
+-------+
| Bob |
| David |
+-------+
2 rows in set (0.00 sec)
쿼리 동작 방식 설명
위 쿼리에서 offset 3은 앞의 3개 행(Chris, Robert, Mike)을 건너뛰라는 의미입니다. 이후 LIMIT 100은 건너뛴 위치부터 최대 100개의 행을 반환하도록 지정합니다. 따라서 남아 있는 Bob과 David 두 개의 레코드만 결과로 출력된 것입니다.
참고로 MySQL에서는 LIMIT 오프셋, 개수 형태의 축약 문법도 지원합니다. 예를 들어 LIMIT 3, 100은 위의 LIMIT 100 OFFSET 3과 동일하게 동작합니다. 페이지네이션(페이징) 처리 시 이러한 OFFSET 문법을 자주 활용할 수 있습니다.