수색…


행 제한 절이있는 처음 N 개의 행 가져 오기

FETCH 절은 Oracle 12c R1에 도입되었습니다.

SELECT   val
FROM     mytable
ORDER BY val DESC
FETCH FIRST 5 ROWS ONLY;

이전 버전에서도 작동하는 FETCH가없는 예 :

SELECT * FROM (
   SELECT   val
   FROM     mytable
   ORDER BY val DESC
) WHERE ROWNUM <= 5;

SQL에서 페이지 매김

SELECT val 
FROM   (SELECT val, rownum AS rnum
        FROM   (SELECT val
                FROM   rownum_order_test
                ORDER BY val)
        WHERE rownum <= :upper_limit)
WHERE  rnum >= :lower_limit ;

이렇게하면 웹 데이터 페이지처럼 테이블 데이터를 매길 수 있습니다.

테이블에서 N 개의 레코드 가져 오기

rownum 절을 사용하여 결과에서 행을 제한 할 수 있습니다.

select * from 
( 
  select val from  mytable
) where rownum<=5

첫 번째 또는 마지막 레코드가 필요하면 순서를 기반으로 결과를 줄 내부 쿼리에서 order by 절을 원합니다.

마지막 다섯 기록 :

select * from 
( 
    select val from  mytable order by val desc
) where rownum<=5

처음 다섯 기록

select * from 
( 
    select val from  mytable order by val
) where rownum<=5

많은 행에서 N에서 M까지의 행 가져 오기 (Oracle 12c 이전)

분석 함수 row_number ()를 사용하십시오.

with t as (
  select col1
  , col2
  , row_number() over (order by col1, col2) rn
  from table
)
select col1
, col2
from t
where rn between N and M; -- N and M are both inclusive

오라클 12c는 OFFSETFETCH 로이 작업을보다 쉽게 ​​처리합니다.

일부 행을 건너 뛰고 일부를 가져 가기

Oracle 12g +

SELECT Id, Col1
FROM TableName 
ORDER BY Id
OFFSET 20 ROWS FETCH NEXT 20 ROWS ONLY;

이전 버전

SELECT Id, 
   Col1
 FROM (SELECT Id,
           Col1,
           row_number() over (order by Id) RowNumber
      FROM TableName)
WHERE RowNumber BETWEEN 21 AND 40

결과에서 일부 행 건너 뛰기

Oracle 12g +

SELECT Id, Col1
FROM TableName 
ORDER BY Id
OFFSET 5 ROWS;

이전 버전

SELECT Id, 
   Col1
 FROM (SELECT Id,
           Col1,
           row_number() over (order by Id) RowNumber
      FROM TableName)
WHERE RowNumber > 20


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow