MySQL 테이블에서 마지막 항목 조회하기
MySQL 테이블에서 마지막에 저장된 항목(레코드)을 가져오려면 ORDER BY 절을 활용하면 됩니다. 대표적인 방법은 크게 두 가지가 있습니다.
방법 1: ORDER BY ... DESC LIMIT 사용
특정 컬럼을 기준으로 내림차순(DESC) 정렬한 뒤, 첫 번째 행만 가져오는 가장 간단한 방식입니다.
SELECT * FROM yourTableName ORDER BY yourColumnName DESC LIMIT 1;
방법 2: MAX() 함수 사용
컬럼의 최댓값을 변수에 담은 후, 해당 값과 일치하는 행을 조회하는 방식입니다.
SET @anyVariableName = (SELECT MAX(yourColumnName) FROM yourTableName);
SELECT * FROM yourTableName WHERE yourColumnName = @anyVariableName;
두 방법의 동작을 직접 확인하기 위해 예제 테이블을 만들어 보겠습니다.
예제 테이블 생성
아래 쿼리로 테이블을 생성합니다.
mysql> create table lastEntryDemo
-> (
-> Id int NOT NULL AUTO_INCREMENT,
-> Name varchar(30),
-> Age int,
-> PRIMARY KEY(Id)
-> );
Query OK, 0 rows affected (0.71 sec)
샘플 데이터 삽입
INSERT 명령을 사용해 여러 개의 레코드를 추가합니다.
mysql> insert into lastEntryDemo(Name,Age) values('Larry',24);
Query OK, 1 row affected (0.14 sec)
mysql> insert into lastEntryDemo(Name,Age) values('John',21);
Query OK, 1 row affected (0.19 sec)
mysql> insert into lastEntryDemo(Name,Age) values('David',22);
Query OK, 1 row affected (0.18 sec)
mysql> insert into lastEntryDemo(Name,Age) values('Bob',25);
Query OK, 1 row affected (0.20 sec)
mysql> insert into lastEntryDemo(Name,Age) values('Carol',29);
Query OK, 1 row affected (0.17 sec)
mysql> insert into lastEntryDemo(Name,Age) values('Mike',23);
Query OK, 1 row affected (0.14 sec)
mysql> insert into lastEntryDemo(Name,Age) values('Sam',20);
Query OK, 1 row affected (0.15 sec)저장된 전체 데이터 확인
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from lastEntryDemo;
실행 결과는 다음과 같습니다.
+----+-------+------+
| Id | Name | Age |
+----+-------+------+
| 1 | Larry | 24 |
| 2 | John | 21 |
| 3 | David | 22 |
| 4 | Bob | 25 |
| 5 | Carol | 29 |
| 6 | Mike | 23 |
| 7 | Sam | 20 |
+----+-------+------+
7 rows in set (0.00 sec)
마지막 항목 조회 쿼리 실행
방법 1: DESC LIMIT 적용
Name 컬럼을 기준으로 내림차순 정렬하여 마지막 항목을 가져오는 쿼리입니다.
mysql> select *from lastEntryDemo order by Name desc limit 1;
실행 결과는 다음과 같습니다.
+----+------+------+
| Id | Name | Age |
+----+------+------+
| 7 | Sam | 20 |
+----+------+------+
1 row in set (0.00 sec)
방법 2: MAX() 적용
Id 컬럼의 최댓값을 구한 뒤 해당 레코드를 조회하는 쿼리입니다.
mysql> set @MaxId = (select max(Id) from lastEntryDemo);
Query OK, 0 rows affected (0.00 sec)
mysql> select *from lastEntryDemo where Id = @MaxId;
실행 결과는 다음과 같습니다.
+----+------+------+
| Id | Name | Age |
+----+------+------+
| 7 | Sam | 20 |
+----+------+------+
1 row in set (0.00 sec)
두 방법의 차이점
이번 예제에서는 두 쿼리 모두 같은 결과(Sam)를 반환했지만, 그 의미는 서로 다릅니다. 방법 1은 지정한 컬럼 값을 기준으로 정렬했을 때의 마지막 행을 반환하며, 방법 2는 특정 컬럼(보통 자동 증가되는 기본키)의 최댓값을 가진 행, 즉 가장 나중에 삽입된 레코드를 반환합니다. 따라서 '가장 최근에 입력된 데이터'가 필요하다면 AUTO_INCREMENT 기본키에 MAX()를 적용하는 방식이 더 안정적이고 명확합니다.