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

MySQL에서 테이블의 마지막 3개 행을 오름차순으로 조회하는 방법

MySQL에서 테이블의 마지막 몇 개 행을 가져오되 결과를 오름차순으로 정렬해야 하는 경우가 종종 있습니다. 예를 들어, 최근에 추가된 데이터 중 가장 오래된 순서부터 보여주고 싶을 때가 그렇습니다. 이럴 때는 서브쿼리와 함께 ORDER BY DESCLIMIT를 활용하면 간단하게 해결할 수 있습니다.

기본 문법

마지막 세 개의 행을 오름차순으로 선택하려면 아래와 같은 문법을 사용합니다. 먼저 내부 쿼리에서 역순(내림차순)으로 정렬한 뒤 원하는 개수만큼 제한하고, 외부 쿼리에서 다시 오름차순으로 정렬하는 방식입니다.

SELECT * FROM
(SELECT * FROM yourTableName ORDER BY yourColumnName DESC LIMIT 3) anyAliasName
ORDER BY yourColumnName;

예제 테이블 생성하기

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

mysql> create table DemoTable1579
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Name varchar(20)
-> );
Query OK, 0 rows affected (0.67 sec)

데이터 삽입하기

INSERT 명령어를 사용해 테이블에 여러 레코드를 추가합니다.

mysql> insert into DemoTable1579(Name) values('Robert');
Query OK, 1 row affected (0.37 sec)
mysql> insert into DemoTable1579(Name) values('Bob');
Query OK, 1 row affected (0.48 sec)
mysql> insert into DemoTable1579(Name) values('Chris');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1579(Name) values('Sam');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable1579(Name) values('Mike');
Query OK, 1 row affected (0.09 sec)

저장된 전체 레코드 확인하기

SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.

mysql> select * from DemoTable1579;

위 쿼리는 다음과 같은 결과를 출력합니다.

+----+--------+
| Id | Name |
+----+--------+
| 1 | Robert |
| 2 | Bob |
| 3 | Chris |
| 4 | Sam |
| 5 | Mike |
+----+--------+
5 rows in set (0.00 sec)

마지막 3개 행을 오름차순으로 조회하는 쿼리

이제 테이블의 마지막 세 개 행을 오름차순으로 선택하는 핵심 쿼리를 살펴보겠습니다. 내부 서브쿼리에서 Id 기준으로 내림차순 정렬 후 3개만 가져오고, 이를 별칭 t로 감싸 다시 Id 오름차순으로 정렬합니다.

mysql> select * from
-> (select * from DemoTable1579 order by Id desc limit 3) t
-> order by Id;

위 쿼리를 실행하면 다음과 같은 결과를 얻을 수 있습니다.

+----+-------+
| Id | Name |
+----+-------+
| 3 | Chris |
| 4 | Sam |
| 5 | Mike |
+----+-------+
3 rows in set (0.00 sec)

동작 원리 정리

이 쿼리가 작동하는 방식을 단계별로 살펴보면 다음과 같습니다.

1단계: 내부 서브쿼리가 ORDER BY Id DESC LIMIT 3를 통해 Id가 가장 큰 최근 3개 행(Id 5, 4, 3)을 추출합니다.

2단계: 외부 쿼리가 해당 결과를 다시 ORDER BY Id로 오름차순 정렬하여 최종적으로 Id 3, 4, 5 순서의 결과를 반환합니다.

이 패턴은 LIMIT 절이 적용된 후에는 정렬 방향을 바꿀 수 없기 때문에 필요하며, 게시판의 최근 글 목록이나 로그 데이터의 최신 항목을 시간순으로 표시할 때 매우 유용하게 활용됩니다.