728x90
반응형
쿼리 결과 데이터를 10줄로 제한하여 보고 싶다면 MySQL의 경우, LIMIT를 사용하면 된다.
그러나 Oracle에서는 LIMIT를 사용할 수 없다.
Oracle에서 결과값을 제한하여 보고 싶다면 ROWNUM을 사용해야 한다.
Oracle의 ROWNUM 사용 방식에는 크게 두 가지가 있는데, 이는 상황에 따라 쓰임새가 다르다.
1. ROWNUM 사용
SELECT 컬럼
FROM 테이블
WHERE 컬럼 = '02' AND ROWNUM <= 10;
해당 쿼리는 ROWNUM만을 사용하여 조건에 맞는 레코드를 10개로 제한한다.
그러나 ROWNUM은 쿼리 실행 순서에 따라 적용되기 때문에 특정 상황에서는 예상치 못한 결과를 반환할 수 있다.
2. 서브쿼리 사용 후 ROWNUM 사용
SELECT 컬럼
FROM (
SELECT 컬럼
FROM 테이블
WHERE 컬럼 = '02'
)
WHERE ROWNUM <= 10;
해당 쿼리는 서브쿼리를 사용하여 먼저 조건에 맞는 모든 레코드를 선택한 후,
외부 쿼리에서 ROWNUM을 사용하여 상위 10개의 레코드만 반환한다.
이 방식은 앞서 ROWNUM만 사용한 방식보다 더 명확하게 작동하며,
특히 정렬이 필요한 경우 더욱 권장된다.
3. 차이점
1. 쿼리 실행 순서
ROWNUM만 사용 | 서브쿼리 후 ROWNUM 사용 |
1) 조건에 맞는 레코드 찾기 2) 바로 ROWNUM 적용 |
1) 조건에 맞는 모든 레코드를 서브쿼리에서 찾기 2) 외부 쿼리에서 ROWNUM 적용 |
2. 정렬
ROWNUM만 사용 | 서브쿼리 후 ROWNUM 사용 |
정렬이 필요한 경우, 예상치 못한 결과 초래 가능성 있음 |
서브쿼리에서 먼저 정렬 수행 후, ROWNUM 적용 (안정적) |
4. 요약
어떤 구문이 더 효과적인가?
- 일반적인 경우 : '서브쿼리 수행 후 ROWNUM 적용' 추천
SELECT 컬럼
FROM (
SELECT 컬럼
FROM 테이블
WHERE 컬럼 = '02'
)
WHERE ROWNUM <= 10;
해당 쿼리를 사용하는 것이 더 명확하고, 특히 정렬이 필요한 경우 더 안전하기 때문이다.
- 성능이 더 중요한 경우 : 'ROWNUM만 적용' 고려
SELECT 컬럼
FROM 테이블
WHERE 컬럼 = '02' AND ROWNUM <= 10;
단순한 조건 검색에서는 해당 쿼리가 더 간단하고 성능 면에서 유리할 수 있다.
그러나 복잡한 조건이나 정렬이 필요한 경우 '서브쿼리 수행 후 ROWNUM 적용' 쿼리가 더 적합하다.
따라서 일반적인 대부분의 경우에는
'서브쿼리 수행 후 ROWNUM 적용' 쿼리 구조를 사용하는 것이 더 안전하고 명확한 결과를 얻는 데 도움이 된다.
728x90
반응형
'[Language] > SQL' 카테고리의 다른 글
[Oracle] ORA-17800: 읽은 호출에서 -1을 가져왔습니다. (1) | 2024.07.02 |
---|---|
SQL Error [933] [42000]: ORA-00933: SQL command not properly ended (0) | 2024.07.01 |
[Oracle] NVL(컬럼명, '값') (0) | 2024.07.01 |
[Oracle]SQL Error [1401] [22001]: ORA-01401 (0) | 2024.06.21 |
[Oracle] TableSpace 생성 (0) | 2024.06.21 |