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

MySQL에서 ID 기준으로 마지막 5개 레코드 정렬하여 조회하는 방법

MySQL에서 테이블의 마지막 5개 레코드를 ID 순서대로 오름차순으로 정렬해서 가져오고 싶다면 서브쿼리(subquery)를 활용하면 됩니다. 핵심 아이디어는 먼저 ID를 내림차순(DESC)으로 정렬해 최근 5개 행을 추출한 뒤, 그 결과를 다시 오름차순(ASC)으로 정렬하는 것입니다.

1. 예제 테이블 생성하기

먼저 실습에 사용할 간단한 테이블을 만들어 보겠습니다.

mysql> create table DemoTable
(
    Id int
);
Query OK, 0 rows affected (0.68 sec)

2. 샘플 데이터 삽입하기

INSERT 명령을 사용해 여러 개의 레코드를 입력합니다.

mysql> insert into DemoTable values(100);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values(115);
Query OK, 1 row affected (0.32 sec)
mysql> insert into DemoTable values(200);
Query OK, 1 row affected (0.28 sec)
mysql> insert into DemoTable values(140);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values(124);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values(198);
Query OK, 1 row affected (0.24 sec)
mysql> insert into DemoTable values(156);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values(178);
Query OK, 1 row affected (0.23 sec)
mysql> insert into DemoTable values(156);
Query OK, 1 row affected (0.43 sec)

3. 전체 레코드 확인하기

SELECT 문으로 테이블에 저장된 모든 데이터를 조회해 보겠습니다.

mysql> select *from DemoTable;

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

+------+
| Id   |
+------+
| 100  |
| 115  |
| 200  |
| 140  |
| 124  |
| 198  |
| 156  |
| 178  |
| 156  |
+------+
9 rows in set (0.00 sec)

총 9개의 레코드가 저장되어 있으며, 이 중에서 ID가 가장 큰 값들을 기준으로 마지막 5개를 추출해야 합니다.

4. 서브쿼리로 마지막 5개 레코드 조회하기

아래 쿼리는 내부 서브쿼리에서 ORDER BY Id DESC LIMIT 5로 가장 큰 ID 5개를 먼저 선택하고, 외부 쿼리에서 다시 ORDER BY Id로 오름차순 정렬하는 구조입니다.

mysql> select *from(select *from DemoTable order by Id DESC limit 5)tbl
order by Id;

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

+------+
| Id   |
+------+
| 156  |
| 156  |
| 178  |
| 198  |
| 200  |
+------+
5 rows in set (0.00 sec)

동작 원리 정리

  • 내부 서브쿼리: ORDER BY Id DESC LIMIT 5를 통해 ID가 가장 큰 5개 레코드(156, 156, 178, 198, 200)를 추출합니다.
  • 외부 쿼리: 추출된 결과에 별칭(alias) tbl을 붙인 뒤, ORDER BY Id로 다시 오름차순 정렬합니다.

이처럼 서브쿼리를 두 단계로 나누면, 전체 데이터를 내림차순으로 보여주는 대신 마지막 N개 레코드만 자연스러운 오름차순 순서로 깔끔하게 출력할 수 있습니다. 게시판의 최근 글 목록처럼 최신 데이터 몇 건을 순서대로 보여줘야 하는 경우에 유용하게 활용할 수 있는 패턴입니다.