>데이터 베이스 >Oracle >오라클 페이징 작성 방법

오라클 페이징 작성 방법

PHPz
PHPz원래의
2023-04-21 10:10:271946검색

Oracle 페이징은 특히 웹 애플리케이션과 API를 개발할 때 매우 일반적인 요구 사항입니다. 페이지 매김은 서버 리소스 사용량을 효과적으로 줄이고 사용자에게 보다 사용자 친화적인 경험을 제공할 수 있습니다. 그렇다면 Oracle 페이징은 어떻게 작성해야 할까요? 아래에 소개하겠습니다.

우선 우리의 요구사항을 명확히 해야 합니다. 많은 주문 정보가 포함된 주문이라는 주문 테이블이 있다고 가정해 보겠습니다. 페이지당 고정된 항목 수에 따라 지정된 페이지 번호 데이터를 쿼리해야 합니다. 예를 들어 각 페이지에는 10개의 항목이 표시되고 3페이지의 주문 데이터를 쿼리합니다. 그렇다면 그것을 달성하는 방법은 무엇입니까? 다음으로 몇 가지 구현 방법을 자세히 소개하겠습니다.

1. 하위 쿼리를 사용하여 페이징 구현

하위 쿼리는 Oracle에서 페이징을 구현하는 일반적인 방법으로, ROWNUM을 사용하여 수행할 수 있습니다. 기본 아이디어는 정렬을 위해 내부 쿼리에서 ROWNUM을 사용한 다음 페이징 작업을 위해 외부 쿼리에서 ROWNUM을 사용하는 것입니다. 코드는 다음과 같습니다.

SELECT * FROM (
  SELECT orders.*, ROWNUM rnum
  FROM (
    SELECT * FROM orders
    ORDER BY order_date DESC
  ) orders
  WHERE ROWNUM <= 30
) WHERE rnum >= 21;

위 코드에서 쿼리 문에는 세 가지 수준의 중첩이 포함되어 있습니다. 가장 바깥쪽의 SELECT 문은 WHERE 절을 사용하여 ROWNUM을 필터링하고 페이징 작업을 구현합니다. 내부 쿼리문에는 주로 데이터 정렬에 사용되는 ORDER BY 문이 포함되어 있습니다. 가장 안쪽의 SELECT 문은 쿼리하려는 테이블 순서를 지정합니다.

2. ROW_NUMBER() 함수를 사용하여 페이징 구현

페이징을 구현하는 또 다른 방법은 ROW_NUMBER() 함수를 사용하는 것입니다. 이 방법은 지정된 열을 기준으로 정렬해야 할 때 매우 유용합니다. 코드는 다음과 같습니다.

SELECT *
FROM (
  SELECT orders.*,
         ROW_NUMBER() OVER(ORDER BY order_date DESC) AS row_num
  FROM orders
) WHERE row_num BETWEEN 21 AND 30;

위 코드에서는 ROW_NUMBER() 함수를 사용하여 정렬 후 각 레코드의 위치를 ​​지정하는 데 사용되는 row_num라는 새 필드를 생성합니다. WHERE 절을 사용하여 지정된 범위 내의 레코드를 필터링할 수 있습니다.

3. OFFSET-FETCH를 사용하여 페이징 구현

Oracle 12c 이후에는 OFFSET-FETCH 문을 사용하는 새로운 페이징 구현 방법이 도입되었습니다. 이전 두 가지 방법에 비해 이 방법은 더 직관적이고 간결하며 코드를 읽고 이해하기가 더 쉽습니다. 코드는 다음과 같습니다.

SELECT *
FROM orders
ORDER BY order_date DESC
OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;

위 코드에서는 OFFSET-FETCH 문을 사용하여 페이징 작업을 구현했습니다. OFFSET은 오프셋을 지정하는 데 사용됩니다. 즉, FETCH는 쿼리할 행 수를 지정하는 데 사용됩니다. 이 방법을 사용하면 쿼리 문을 크게 단순화하고 쿼리 효율성을 높일 수 있습니다.

요약하자면, 이 글에서는 하위 쿼리, ROW_NUMBER() 함수, OFFSET-FETCH 문을 사용하는 것을 포함하여 Oracle 페이징을 구현하는 세 가지 방법을 소개합니다. 각 방법에는 적용 가능한 시나리오가 있으며 구체적인 구현 방법도 약간 다릅니다. 다양한 요구에 따라 Oracle 페이징을 구현하는 해당 방법을 선택할 수 있습니다.

위 내용은 오라클 페이징 작성 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.