MySQL에서 정렬된 목록의 중간에 위치한 결과만 조회하고 싶다면 ORDER BY 절과 LIMIT 절을 함께 사용하면 됩니다. LIMIT 절에 오프셋(offset)과 개수(count)를 지정하면, 앞부분의 행을 건너뛴 후 원하는 개수만큼의 행만 가져올 수 있습니다.
테이블 생성하기
먼저 예제에 사용할 테이블을 생성합니다. 아래 쿼리를 실행하세요.
mysql> create table sortedListDemo
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> StudentName varchar(100)
-> );
Query OK, 0 rows affected (0.46 sec)
샘플 데이터 삽입하기
INSERT 명령문을 사용하여 테이블에 학생 이름 데이터를 추가합니다.
mysql> insert into sortedListDemo(StudentName) values('John');
Query OK, 1 row affected (0.62 sec)
mysql> insert into sortedListDemo(StudentName) values('Sam');
Query OK, 1 row affected (0.18 sec)
mysql> insert into sortedListDemo(StudentName) values('Adam');
Query OK, 1 row affected (0.13 sec)
mysql> insert into sortedListDemo(StudentName) values('James');
Query OK, 1 row affected (0.21 sec)
mysql> insert into sortedListDemo(StudentName) values('Jace');
Query OK, 1 row affected (0.13 sec)
mysql> insert into sortedListDemo(StudentName) values('Mike');
Query OK, 1 row affected (0.12 sec)
mysql> insert into sortedListDemo(StudentName) values('Carol');
Query OK, 1 row affected (0.18 sec)
mysql> insert into sortedListDemo(StudentName) values('Bob');
Query OK, 1 row affected (0.17 sec)
mysql> insert into sortedListDemo(StudentName) values('Ramit');
Query OK, 1 row affected (0.16 sec)
mysql> insert into sortedListDemo(StudentName) values('Chris');
Query OK, 1 row affected (0.21 sec)
mysql> insert into sortedListDemo(StudentName) values('Robert');
Query OK, 1 row affected (0.14 sec)
mysql> insert into sortedListDemo(StudentName) values('David');
Query OK, 1 row affected (0.21 sec)
저장된 전체 데이터 확인하기
SELECT 문으로 테이블에 저장된 모든 레코드를 조회해 보겠습니다.
mysql> select * from sortedListDemo;
실행 결과는 다음과 같습니다.
+----+-------------+ | Id | StudentName | +----+-------------+ | 1 | John | | 2 | Sam | | 3 | Adam | | 4 | James | | 5 | Jace | | 6 | Mike | | 7 | Carol | | 8 | Bob | | 9 | Ramit | | 10 | Chris | | 11 | Robert | | 12 | David | +----+-------------+ 12 rows in set (0.00 sec)
정렬된 목록 중간에서 결과 선택하기
이제 학생 이름을 기준으로 정렬한 목록의 중간 부분만 조회해 보겠습니다. LIMIT 4, 6에서 첫 번째 숫자인 4는 건너뛸 행의 수(오프셋), 두 번째 숫자인 6은 반환할 행의 수를 의미합니다. 즉, 이름순으로 정렬된 결과에서 앞의 4개 행을 제외한 이후의 6개 행이 출력됩니다.
mysql> select *from sortedListDemo -> order by StudentName -> LIMIT 4,6;
실행 결과는 다음과 같습니다.
+----+-------------+ | Id | StudentName | +----+-------------+ | 12 | David | | 5 | Jace | | 4 | James | | 1 | John | | 6 | Mike | | 9 | Ramit | +----+-------------+ 6 rows in set (0.00 sec)
출력 결과를 보면 전체 12개 레코드가 StudentName 기준 오름차순으로 정렬된 상태에서, 앞의 4개 행(Adam, Bob, Carol, Chris)이 생략되고 David부터 Ramit까지 6개 행이 반환된 것을 확인할 수 있습니다. 이처럼 ORDER BY와 LIMIT의 조합은 게시판 페이징 처리 등 특정 구간의 데이터만 필요할 때 매우 유용하게 활용됩니다.