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;
주요 차이점
- 표준 준수: FETCH FIRST 1 ROW ONLY는 SQL 표준 구문이므로, Oracle 외의 다른 데이터베이스에서도 호환될 가능성이 높습니다.
- 사용 용도: ORDER BY와 함께 사용 시, FETCH FIRST 1 ROW ONLY가 더 직관적이고 명확합니다. 반면, ROWNUM은 필터링 순서에 주의해야 합니다.
- 성능 및 최적화: FETCH FIRST 1 ROW ONLY는 최신 버전의 Oracle에서는 성능 최적화를 위해 더 나은 선택일 수 있습니다.
따라서, 간단한 경우에는 ROWNUM을 사용할 수 있지만, 복잡한 쿼리나 가독성을 높이기 위해서는 FETCH FIRST 1 ROW ONLY를 사용하는 것이 좋습니다.
728x90
반응형
'DB' 카테고리의 다른 글
[MySQL][Oracle] Boolean 데이터 타입의 차이점 (0) | 2024.08.07 |
---|---|
[DB][Oracle] DECODE (0) | 2024.08.05 |
[DB][Oracle] FETCH FIRST 1 ROW ONLY (0) | 2024.07.23 |
[DB][Oracle] T0_CHAR 날짜형식 (1) | 2024.07.21 |
[DB][Oracle] PL/SQL 블록을 사용하여 한번에 insert 하기 (0) | 2024.07.17 |