MySQL에서 테이블 내 ID가 가장 큰 행을 조회하려면 ORDER BY 절과 LIMIT, OFFSET을 함께 사용하면 됩니다. 이 방법은 특정 컬럼을 기준으로 내림차순 정렬한 뒤, 첫 번째 행만 가져오는 원리로 동작합니다.
기본 문법
select *from yourTableName order by yourColumnName desc limit 1 offset 0;
- order by ... desc: 지정한 컬럼을 기준으로 내림차순(큰 값부터) 정렬합니다.
- limit 1: 결과 중 첫 번째 행 하나만 반환합니다.
- offset 0: 첫 번째 행부터 시작한다는 의미입니다. 사실상 생략해도 결과는 동일합니다.
예제 테이블 생성하기
문법을 실제로 이해하기 위해 예제 테이블을 먼저 만들어 보겠습니다. 아래 쿼리로 직원 정보를 저장할 테이블을 생성합니다.
mysql> create table HighestIdOrderBy -> ( -> EmployeeId int, -> EmployeeName varchar(200) -> ); Query OK, 0 rows affected (0.58 sec)
데이터 삽입하기
INSERT 명령어를 사용해 테이블에 직원 데이터를 추가합니다.
mysql> insert into HighestIdOrderBy values(200,'David'); Query OK, 1 row affected (0.20 sec) mysql> insert into HighestIdOrderBy values(1000,'Bob'); Query OK, 1 row affected (0.18 sec) mysql> insert into HighestIdOrderBy values(600,'John'); Query OK, 1 row affected (0.16 sec) mysql> insert into HighestIdOrderBy values(300,'Johnson'); Query OK, 1 row affected (0.18 sec) mysql> insert into HighestIdOrderBy values(100,'Carol'); Query OK, 1 row affected (0.12 sec)
전체 데이터 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from HighestIdOrderBy;
실행 결과는 다음과 같습니다.
+------------+--------------+ | EmployeeId | EmployeeName | +------------+--------------+ | 200 | David | | 1000 | Bob | | 600 | John | | 300 | Johnson | | 100 | Carol | +------------+--------------+ 5 rows in set (0.00 sec)
가장 높은 ID를 가진 행 조회하기
이제 EmployeeId를 기준으로 내림차순 정렬하고, 상위 1개 행만 가져오는 쿼리를 실행합니다.
mysql> select *from HighestIdOrderBy order by EmployeeId desc limit 1 offset 0;
실행 결과는 다음과 같습니다.
+------------+--------------+ | EmployeeId | EmployeeName | +------------+--------------+ | 1000 | Bob | +------------+--------------+ 1 row in set (0.00 sec)
결과에서 확인할 수 있듯이, 테이블에서 가장 큰 ID(1000)를 가진 'Bob'의 행이 정확히 한 건 반환되었습니다.
참고: MAX() 함수와의 차이점
단순히 최대 ID 값 자체만 필요하다면 SELECT MAX(EmployeeId) FROM HighestIdOrderBy;처럼 MAX() 함수를 사용하는 것이 더 간단하고 효율적입니다. 반면, 최대 ID를 가진 행 전체(모든 컬럼)를 가져와야 할 때는 위에서 소개한 ORDER BY ... DESC LIMIT 1 방식이 유용합니다.