Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 정렬된 목록의 중간 부분 결과만 조회하는 방법

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의 조합은 게시판 페이징 처리 등 특정 구간의 데이터만 필요할 때 매우 유용하게 활용됩니다.