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

MySQL에서 특정 LIMIT 이후의 정렬된 레코드 조회하기 (서브쿼리 활용)

MySQL에서 특정 개수(LIMIT)를 건너뛴 후 나머지 레코드를 원하는 순서대로 정렬하여 조회하려면 서브쿼리(subquery)를 활용하는 것이 효과적입니다. 이 글에서는 예제 테이블을 만들고, 서브쿼리를 사용해 특정 지점 이후의 데이터를 내림차순으로 정렬하여 가져오는 방법을 단계별로 살펴보겠습니다.

1. 예제 테이블 생성

먼저 학생 정보를 저장할 테이블을 생성합니다.

mysql> create table DemoTable618 (
    StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    StudentFirstName varchar(100)
);
Query OK, 0 rows affected (1.45 sec)

2. 샘플 데이터 삽입

INSERT 명령어를 사용해 여러 학생 이름을 입력합니다.

mysql> insert into DemoTable618(StudentFirstName) values('David');
Query OK, 1 row affected (0.23 sec)
mysql> insert into DemoTable618(StudentFirstName) values('Chris');
Query OK, 1 row affected (0.44 sec)
mysql> insert into DemoTable618(StudentFirstName) values('Robert');
Query OK, 1 row affected (0.54 sec)
mysql> insert into DemoTable618(StudentFirstName) values('Sam');
Query OK, 1 row affected (0.24 sec)
mysql> insert into DemoTable618(StudentFirstName) values('Mike');
Query OK, 1 row affected (0.22 sec)
mysql> insert into DemoTable618(StudentFirstName) values('Carol');
Query OK, 1 row affected (0.28 sec)
mysql> insert into DemoTable618(StudentFirstName) values('Bob');
Query OK, 1 row affected (3.66 sec)
mysql> insert into DemoTable618(StudentFirstName) values('John');
Query OK, 1 row affected (0.17 sec)

3. 전체 데이터 확인

SELECT 문으로 테이블에 저장된 모든 레코드를 확인합니다.

mysql> select *from DemoTable618;

실행 결과는 다음과 같습니다.

+-----------+------------------+
| StudentId | StudentFirstName |
+-----------+------------------+
|         1 | David            |
|         2 | Chris            |
|         3 | Robert           |
|         4 | Sam              |
|         5 | Mike             |
|         6 | Carol            |
|         7 | Bob              |
|         8 | John             |
+-----------+------------------+
8 rows in set (0.00 sec)

4. 특정 LIMIT 이후의 레코드를 정렬하여 조회하기

이제 핵심 쿼리입니다. 아래 쿼리는 StudentId가 5 이상인 레코드 중 최대 4개를 먼저 선택한 뒤(내부 서브쿼리), 그 결과를 다시 내림차순(DESC)으로 정렬하여 반환합니다.

mysql> select *from 
(select StudentId, StudentFirstName from DemoTable618 
 where StudentId >= 5 order by StudentId limit 4) tbl 
order by tbl.StudentId desc;

쿼리 동작 원리

  • 내부 서브쿼리: WHERE 절로 StudentId가 5 이상인 행만 필터링하고, ORDER BY와 LIMIT 4로 오름차순 기준 상위 4개(5~8번)를 선택합니다.
  • 외부 쿼리: 서브쿼리의 결과에 별칭(tbl)을 붙인 후, 다시 내림차순으로 정렬해 최종 결과를 만듭니다.

실행 결과는 다음과 같습니다.

+-----------+------------------+
| StudentId | StudentFirstName |
+-----------+------------------+
|         8 | John             |
|         7 | Bob              |
|         6 | Carol            |
|         5 | Mike             |
+-----------+------------------+
4 rows in set (0.00 sec)

마무리

이처럼 서브쿼리를 감싸는 방식을 사용하면, 조건 필터링 → 제한(LIMIT) → 재정렬의 흐름을 자유롭게 구성할 수 있습니다. 게시판 페이징이나 최근 데이터 역순 조회 등 실무에서 자주 활용되는 패턴이므로 꼭 익혀두시기 바랍니다.