DB

[DB][Oracle] FETCH FIRST 1 ROW ONLY 와 ROWNUM 1의 차이

오선지♬ 2024. 7. 24. 19:26
728x90
반응형

FETCH FIRST 1 ROW ONLY와 ROWNUM = 1은 Oracle SQL에서 특정 개수의 행을 가져올 때 사용됩니다. 그러나 이 두 가지는 서로 다른 방식으로 동작하며, 사용 사례에 따라 적합한 상황이 다릅니다.

 

FETCH FIRST 1 ROW ONLY

이 구문은 SQL:2008 표준에 도입된 구문으로, 특정 수의 행을 가져오는 작업을 수행합니다. ORDER BY 절과 함께 사용될 때 특히 유용하며, 그 의미가 명확합니다. 예를 들어, 가장 높은 점수를 가진 학생의 정보를 가져올 때 ORDER BY score DESC와 함께 사용하면 됩니다.

SELECT *
FROM students
ORDER BY score DESC
FETCH FIRST 1 ROW ONLY;

 

이 구문은 ORDER BY 절이 있는 상황에서 최적의 성능을 발휘하며, 명확한 의미 전달을 위해 널리 사용됩니다.

ROWNUM = 1

ROWNUM은 Oracle에서 제공하는 가상 열로, 결과 집합의 각 행에 대해 고유한 번호를 부여합니다. ROWNUM = 1을 사용하면 쿼리의 결과 집합에서 첫 번째 행을 가져옵니다. 그러나 ROWNUM을 사용하면 최종적으로 필터링된 결과가 아닌, 쿼리 실행 초기에 번호가 매겨진다는 점에서 주의가 필요합니다.

예를 들어, 아래와 같이 사용됩니다:

SELECT *
FROM (
    SELECT *
    FROM students
    ORDER BY score DESC
)
WHERE ROWNUM = 1;

 

 

주요 차이점

  1. 표준 준수: FETCH FIRST 1 ROW ONLY는 SQL 표준 구문이므로, Oracle 외의 다른 데이터베이스에서도 호환될 가능성이 높습니다.
  2. 사용 용도: ORDER BY와 함께 사용 시, FETCH FIRST 1 ROW ONLY가 더 직관적이고 명확합니다. 반면, ROWNUM은 필터링 순서에 주의해야 합니다.
  3. 성능 및 최적화: FETCH FIRST 1 ROW ONLY는 최신 버전의 Oracle에서는 성능 최적화를 위해 더 나은 선택일 수 있습니다.

따라서, 간단한 경우에는 ROWNUM을 사용할 수 있지만, 복잡한 쿼리나 가독성을 높이기 위해서는 FETCH FIRST 1 ROW ONLY를 사용하는 것이 좋습니다.

728x90
반응형