본문 바로가기
Sql

ROWNUM = 1은 정렬

by 헬로제이콥 2025. 7. 21.

SQL 쿼리로 확인

SELECT * FROM v$version;
 
  • 이 쿼리를 실행하면 오라클의 버전, 운영체제 버전 등 다양한 정보가 출력되며, 가장 처음에 Database 버전이 표시됩니다

 

racle의 ROWNUM은 정렬 전에 필터링되므로, 단순히 조건 없이 ROWNUM = 1만 쓰면 "최근" 데이터가 아닌, 불특정한 한 줄이 먼저 뽑힐 수 있습니다.

예:

SELECT *
FROM YOUR_TABLE
WHERE ROWNUM = 1
ORDER BY CREATED_DATE DESC;  -- 이 정렬은 먼저 필터 된 1건에만 적용됨
 

따라서 위 쿼리는 제대로 동작하지 않고, 최근 날짜가 아닌 데이터가 나올 수 있습니다.

 FETCH FIRST 1 ROWS ONLY는 ORDER BY 이후 적용됨

예:

 
SELECT *
FROM YOUR_TABLE
ORDER BY CREATED_DATE DESC
FETCH FIRST 1 ROWS ONLY;
  • 이 방식은 먼저 전체 데이터를 날짜 기준으로 정렬하고,
  • 정렬된 결과에서 상위 1개만 가져옵니다.

→ 그래서 **정확히 '최근 1건'**을 가져옵니다.

🔁 또는, Oracle 11g 이하에서는 이렇게 써야...

Oracle 11g 이하에서는 FETCH FIRST 문법이 없기 때문에 다음과 같이 서브쿼리 + ROWNUM 방식으로 쓸 수 있습니다:

 
SELECT *
FROM (
    SELECT *
    FROM YOUR_TABLE
    ORDER BY CREATED_DATE DESC
)
WHERE ROWNUM = 1;
  • 이 방식은 먼저 서브쿼리에서 정렬된 데이터 생성 후
  • 그 결과에서 ROWNUM = 1을 적용
    → 의도대로 동작합니다.

📝 결론

조건추천 방식
Oracle 12c 이상 ORDER BY 날짜 DESC FETCH FIRST 1 ROWS ONLY;
Oracle 11g 이하 SELECT * FROM (SELECT * ORDER BY 날짜 DESC) WHERE ROWNUM = 1;
단순 테스트용 or 임의의 한 줄만 필요 ROWNUM = 1 가능 (정확한 "최신"은 아님)