programing

Oracle/SQL: 쿼리 "SELECT * From records WHEROWNUM >= 5 ANDROWNUM <= 10" - 0개의 행을 반환하는 이유

iphone6s 2023. 10. 19. 22:07
반응형

Oracle/SQL: 쿼리 "SELECT * From records WHEROWNUM >= 5 ANDROWNUM <= 10" - 0개의 행을 반환하는 이유

다음 쿼리가 '0' 레코드를 반환하는 이유는 무엇입니까?

SELECT * WHEROWNUM >= 5 AND Rownum <= 10
오어
SELECT * From records WHEROWNUM > = 5

반면 다음 쿼리는 적절한 레코드를 반환합니다.

SELECT * WHERNUM <= 15에서 레코드를 선택합니다.

안부 전해요,
- 아시시

Oracle에서 Rownum 값은 쿼리의 필터링 단계 후에 할당됩니다. 테이블의 행이 아니라 쿼리 결과 집합의 행입니다.

그래서 돌아오는 첫번째 줄에는 항상 1번 줄, 돌아오는 두번째 줄에는 2번 줄 등이 주어집니다.

로넘 값은 할당된 후에만 증가하므로 다음과 같은 쿼리가 있습니다.

select * from t where ROWNUM > 1

결과를 반환하지 않습니다.이 질문은 '나는 나에게 돌아오는 첫 번째 행을 보고 싶지 않다, 그 다음 행만 보고 싶다'라는 일종의 역설이기 때문에 아무것도 돌려받지 못합니다.

에게 묻기:자세한 내용은 ROWNUM제한 결과를 참조하십시오.

ROWNUM은 의사열이며 쿼리 실행 시 해당 값을 사용할 수 없습니다.따라서 이 열을 기준으로 결과를 필터링할 수 없습니다.그런 상황에서, 그것을 완화시킬 수 있는 방법들이 있습니다.아래를 참고하시기 바랍니다(결과가 매우 큰 경우에는 사용하지 않는 것이 좋습니다).

Select a.* From 
(
  Select COL1, COL2, ROWNUM RowNumber From MyTable
) a
Where
   RowNumber = 5;

사용하는 것이 대안입니다.MINUS

SELECT * FROM records 
WHERE   ROWNUM <= 10
minus SELECT * FROM records 
WHERE   ROWNUM <= 5

그러면 unique 이외의 값이 필터링되므로 id를 선택하는 것이 좋습니다.

시간을 좀 아끼길 바랍니다.

언급URL : https://stackoverflow.com/questions/855422/oracle-sql-why-does-query-select-from-records-where-rownum-5-and-rownum

반응형