MySQL에서 데이터를 내림차순으로 정렬하되, 앞부분의 일부 레코드는 건너뛰고 나머지만 조회하고 싶은 경우가 있습니다. 이럴 때 LIMIT 절의 오프셋(offset) 기능을 활용하면 간단하게 해결할 수 있습니다. 예제와 함께 자세히 살펴보겠습니다.
1. 테이블 생성
먼저 실습에 사용할 테이블을 생성합니다.
mysql> create table DemoTable ( Id int, Name varchar(100) ); Query OK, 0 rows affected (0.94 sec)
2. 샘플 데이터 삽입
INSERT 명령을 사용하여 테이블에 레코드를 추가합니다.
mysql> insert into DemoTable values(10,'Chris'); Query OK, 1 row affected (0.16 sec) mysql> insert into DemoTable values(1,'David'); Query OK, 1 row affected (0.18 sec) mysql> insert into DemoTable values(4,'Bob'); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable values(6,'Sam'); Query OK, 1 row affected (0.15 sec) mysql> insert into DemoTable values(7,'Mike'); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable values(5,'Carol'); Query OK, 1 row affected (0.20 sec) mysql> insert into DemoTable values(9,'John'); Query OK, 1 row affected (0.19 sec)
3. 전체 레코드 확인
SELECT 문으로 테이블에 저장된 모든 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+------+-------+ | Id | Name | +------+-------+ | 10 | Chris | | 1 | David | | 4 | Bob | | 6 | Sam | | 7 | Mike | | 5 | Carol | | 9 | John | +------+-------+ 7 rows in set (0.00 sec)
4. 일부 레코드를 건너뛰며 내림차순 조회
레코드를 내림차순(DESC)으로 정렬하면서 특정 개수만큼 건너뛰려면 LIMIT 오프셋, 개수 형식의 구문을 사용합니다. 아래 예제에서는 앞의 3개 레코드를 건너뛰고 그다음 4개 레코드를 조회합니다.
mysql> select Name from DemoTable order by Id DESC limit 3,4;
여기서 limit 3,4의 의미는 다음과 같습니다.
- 3: 건너뛸 레코드 수(오프셋)
- 4: 반환받을 레코드 수
즉, Id를 기준으로 내림차순 정렬한 결과(10, 9, 7, 6, 5, 4, 1) 중 첫 3개(Chris, John, Mike)를 제외한 나머지가 출력됩니다.
+-------+ | Name | +-------+ | Sam | | Carol | | Bob | | David | +-------+ 4 rows in set (0.00 sec)
정리
MySQL에서 내림차순 정렬된 결과 중 일부를 건너뛰고 싶다면 ORDER BY 컬럼명 DESC LIMIT 건너뛸_개수, 가져올_개수 구문을 사용하면 됩니다. 이 방법은 게시판 페이징 처리나 상위 순위를 제외한 목록 조회 등 다양한 상황에서 유용하게 활용할 수 있습니다.