>  기사  >  데이터 베이스  >  Oracle에서 처음 10개의 레코드를 쿼리하는 방법

Oracle에서 처음 10개의 레코드를 쿼리하는 방법

WBOY
WBOY원래의
2022-01-25 10:37:2140494검색

Oracle에서는 처음 10개의 레코드를 쿼리하기 위해 where 절을 사용할 수 있으며, rownum은 쿼리에 대해 반환되는 총 행 수를 제한하는 데 사용됩니다. 구문은 "rownum

Oracle에서 처음 10개의 레코드를 쿼리하는 방법

이 튜토리얼의 운영 환경: Windows 10 시스템, Oracle 11g 버전, Dell G3 컴퓨터.

Oracle에서 상위 10개 레코드를 쿼리하는 방법

Oracle 테이블의 상위 10개 레코드를 쿼리하는 방법은 무엇입니까?

  select *
  from test
  where rownum <=10

다음은 rownum에 대한 소개입니다.

rownum과 row_number() over()의 사용

ROWNUM은 Oracle에서 제공하는 8부터 시작하는 의사 열입니다. SQL의 결과에 번호를 매기며, 항상 1부터 시작합니다. 목적은 페이징 출력을 사용하는 것입니다.

예를 들어

  SELECT *
  FROM torderdetail a
  WHERE ROWNUM <= 10

이 명령문은 처음 10개의 레코드를 출력하는 것입니다. 여기서의 목적은 SQL Server의 상단과 유사하지만 지정된 숫자 범위의 출력에는 rownum이 더 강력해야 합니다.

  SELECT *
  FROM (SELECT a.*, ROWNUM rn
  FROM torderdetail a)
  WHERE rn >= 10 AND rn <= 20

여기서 rownum rn을 사용한 이유는 rownum 자체가 dc920b8a42939b8a73d8edcaa4899d75= 비교가 완료되었습니다.

 실제 응용 프로그램에서는 가장 최근 레코드를 검색해야 하는 경우가 많습니다. 이를 위해서는 먼저 레코드를 정렬한 다음 rownum을 검색해야 합니다. <=

 일반적으로 일반적입니다.

  SELECT *
  FROM (SELECT a.*
  FROM torderdetail a
  ORDER BY order_date DESC)
  WHERE ROWNUM <= 10

 CSDN에서 rownum 검색에 대한 논의가 있었습니다. 10개 레코드, 누군가 이런 문을 냈습니다.

  SELECT a.*
  FROM torderdetail a
  WHERE ROWNUM <= 10
  ORDER BY order_date DESC

이러한 문이 나타나는 이유는 주로 효율성을 고려한 것입니다. 이전 문은 전체 테이블을 스캔한 다음 10개의 레코드를 가져오는 것입니다. 후자의 문은 그렇지 않습니다. 전체 테이블을 스캔하지만 10개의 레코드만 검색합니다. 분명히 후자 문의 효율성이 훨씬 높아집니다.

그렇다면 왜 분쟁이 발생하는 걸까요? 분쟁은 실행 순서에 있습니다. 먼저 정렬을 수행하여 10개의 레코드를 얻어야 할까요, 아니면 10개의 레코드를 얻은 후에 정렬해야 할까요? 두 순서를 꺼낸 결과는 완전히 반대입니다. 먼저 정렬한 다음 10개의 레코드를 가져오면 가장 최근의 10개 레코드를 가져오고, 먼저 10개의 레코드를 가져온 다음 정렬하면 가장 먼저 10개의 레코드가 꺼집니다. 이 명령문의 경우 일반적으로 실행 순서는 먼저 10개의 레코드를 가져온 다음 정렬하는 것으로 간주됩니다. 따라서 이 진술은 오류여야 합니다. 그러나 실제로는 그렇지 않습니다. 이 명령문의 실행 순서는 order by 필드와 관련이 있습니다. order by 필드가 pk인 경우 먼저 정렬된 다음 10개 항목을 가져옵니다(첫 번째 명령문보다 빠릅니다). ) 및 정렬 필드 PK가 아닌 경우 10개 항목을 먼저 가져와서 정렬합니다. 이때 결과가 요구 사항과 다르기 때문에 두 번째 작성 방법은 정렬 필드에서 결과가 올바른지 확인해야 합니다. 기본 키입니다.

 Row_number() over() 분석 함수는 9I부터 제공되었으며, 일반적인 목적은 rownum과 유사합니다.

 일반적인 작성 방법 row_number() over(order by order_date desc)는 rownum 문과 동일한 순서를 생성하고 효율성도 동일하므로(order by도 있는 rownum 문에 대해) 이 경우 두 가지 사용법은 다음과 같습니다. 와 동일합니다.

 그룹화 후 최신 10개의 레코드를 가져오는 경우 rownum은 이를 달성할 수 없습니다. 이때 row_number()(필드 정렬에 따른 그룹화 필드 순서)만 달성할 수 있습니다. 예를 들어 지난 달 매일의 마지막 10개 주문 기록

  SELECT *
  FROM (SELECT a.*,
  ROW_NUMBER () OVER (PARTITION BY TRUNC (order_date) ORDER BY order_date DESC)
  rn
  FROM torderdetail a)
  WHERE rn <= 10

Rownum의 대체 사용법. 때때로 우리는 이러한 요구에 부딪혀 그 달의 모든 날짜에 대한 출력을 요구할 것입니다. 그러한 테이블이 없기 때문에 많은 사람들이 짜증을 낼 것입니다. 데이터베이스. 한 달의 모든 날짜를 출력하는 방법은 무엇입니까? rownum을 사용하여 해결하세요:

  SELECT TRUNC (SYSDATE, &#39;MM&#39;) + ROWNUM - 1
  FROM DUAL
  CONNECT BY ROWNUM <= TO_NUMBER (TO_CHAR (LAST_DAY (SYSDATE), &#39;dd&#39;))

추천 튜토리얼: "

Oracle Video Tutorial"

위 내용은 Oracle에서 처음 10개의 레코드를 쿼리하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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