복붙노트

[SQL] 오라클 / SQL : - 리턴 제로 행 왜 쿼리 "WHERE ROWNUM> = 5 AND ROWNUM <= 10 기록 SELECT * FROM"않습니다

SQL

오라클 / SQL : - 리턴 제로 행 왜 쿼리 "WHERE ROWNUM> = 5 AND ROWNUM <= 10 기록 SELECT * FROM"않습니다

왜 다음 쿼리 반환 '제로'기록을 수행합니다

SELECT * FROM records WHERE rownum >= 5 AND rownum <= 10

     OR

SELECT * FROM records WHERE rownum >= 5 

다음 쿼리 반환 적절한 기록 반면 :

SELECT * FROM records WHERE rownum <= 15

문안 인사, - 인 Ashish

해결법

  1. ==============================

    1.오라클에서 ROWNUM 값은 쿼리의 필터링 단계 후 할당 - 그들은 테이블의 행 수없는, 그들은 쿼리 결과 집합의 행입니다.

    오라클에서 ROWNUM 값은 쿼리의 필터링 단계 후 할당 - 그들은 테이블의 행 수없는, 그들은 쿼리 결과 집합의 행입니다.

    돌아 오는 첫 번째 행은 항상 ROWNUM 1, 다시 ROWNUM 2 등을 제공 두 번째 행을 받게됩니다 그래서

    ROWNUM 값은이 할당 된 후에 증가, 그렇게되는 모든 쿼리와 같은

    select * from t where ROWNUM > 1
    

    결과를 반환하지 않습니다. 이 쿼리는 아무 것도 반환됩니다 있도록 역설 바콜입니다 '나는 나에게 반환됩니다 첫 번째 행, 그 이후에만 사람을보고 싶지 않다'라고.

    자세한 내용에 ROWNUM 및 제한 결과 : 톰 질문을 참조하십시오.

  2. ==============================

    2.ROWNUM은 의사 열이며, 그것의 값은 쿼리 실행시 사용할 수 없습니다. 이 열을 기준으로 결과를 필터링 할 수 있습니다. 그렇게 말한다면, 그것을 완화하는 작업 방법이 있습니다. (당신의 결과가 매우 큰 경우는 사용하지 않는 것이 좋습니다) 아래를 참조하십시오.

    ROWNUM은 의사 열이며, 그것의 값은 쿼리 실행시 사용할 수 없습니다. 이 열을 기준으로 결과를 필터링 할 수 있습니다. 그렇게 말한다면, 그것을 완화하는 작업 방법이 있습니다. (당신의 결과가 매우 큰 경우는 사용하지 않는 것이 좋습니다) 아래를 참조하십시오.

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

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

    대안 MINUS를 사용하는 것입니다

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

    당신이 더 ID를 선택 할 수 있도록이 고유하지 않은 값을 필터링합니다.

    이것은 당신에게 시간을 절약 할 수 있기를 바랍니다.

  4. from https://stackoverflow.com/questions/855422/oracle-sql-why-does-query-select-from-records-where-rownum-5-and-rownum by cc-by-sa and MIT license