ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 오라클 조회번호 지정(ROWNUM)
    데이터베이스/Oracle 2021. 2. 1. 02:10

    ROWNUM이란?

    자료를 조회하다보면 자료에 번호를 매겨서 정리해야 하는 경우가 생긴다.

     

    예를 들어 게시판을 만들 때 댓글을 달 때 이러한 번호를 매겨야 할 경우가 생긴다.

     

    하지만 이 때 정리하는 번호는 기존의 게시글, 댓글 번호와 달라야 한다.

     

    예제로 살펴보자.

     

     

    위와 같은 데이터를 가진 'TEST_TABLE'이란 테이블이 있다고 가정하자.

     

    해당 컬럼은 NAME, AREA, SCORE 이란 컬럼만 가지고 있다.

     

    우선 여기서 ROWNUM을 사용하는 방법을 알아보자.

    ROWNUM 사용하기

    ROWNUM을 사용하는 방법은 다음과 같다.

     

    SELECT ROWNUM, NAME, AREA, SCORE FROM TEST_TABLE;

    사용법은 아주 간단하게 SELECT 문에서 조회할 때 칼럼과 함께 ROWNUM을 써주면 된다.

     

    ROWNUM은 데이터를 저장했다가 불러오는 것이 아닌 조회 상황에 따라서 조회된 결과에 번호를 매긴다.

     

    그렇기 때문에 별다른 조건없이 ROWNUM을 컬럼들과 같이 조회한다고 그러면 사용할 수 있다.

     

    결과는 아래와 같다.

     

     

     

    예상한대로 조회한 데이터들에 ROWNUM이 데이터들과 함께 가지런히 정렬된 것을 볼 수 있다.

     

    그렇다면 이들을 점수별로 나열하고 그 다음 ROWNUM으로 번호를 붙여보면 어떨까?

     

    아래 쿼리를 실행해보자.

     

     

    결과는 다음과 같다.

     

     

     

    근데 예상과 달리 ROWNUM이 이상하게 매겨졌다.

     

    그 이유는 ORDER BY로 정렬한 부분이 SELECT로 자료 조회가 이뤄진 후에 진행됐기 때문이다.

     

    즉 이미 ROWNUM이 매겨진 이후에 정렬을 했기 때문에 저런 결과가 나온 것이다.

     

    이미 위에서 ROWNUM은 SELECT 순간 번호가 매겨진다고 말한대로 결과가 나왔다.

     

    그렇다면 이럴 땐 어떻게 해야할까?

     

    2021/02/01 - [데이터베이스/Oracle] - 오라클 서브쿼리(Subquery)

     

    오라클 서브쿼리(Subquery)

    서브쿼리란? 일종의 조회문(SELECT) 안의 조회문(SELECT)이라고 설명하는 것이 이해하기 쉬울 것이다. 오라클을 이용하다보면 다양한 조건으로 자료들을 조회(SELECT)하게 된다. 이러한 조회 방법 중

    sgcomputer.tistory.com

    이전 글에서 설명했던  서브쿼리를 쓰면 된다.

     

    서브쿼리를 이용한 쿼리는 다음과 같다.

     

    결과는 다음과 같다.

     

     

     

    서브 쿼리로 미리 ORDER BY를 진행한 테이블에 ROWNUM을 적용하니까 정상적으로 숫자가 나열됐다.

    ROWNUM 숫자 고정하기

    앞서 설명한 것처럼 ROWNUM은 데이터를 조회하는 시점에서 번호가 매겨진다.

     

    그렇기 때문에 ROWNUM의 숫자는 유동적일 수 밖에 없다.

     

    하지만 필요에 따라 ROWNUM을 고정해서 사용하고 싶을 때가 있다.

     

    그럴 때는 다시 서브쿼리를 이용하면 된다.

     

    서브 쿼리 안에서 SELECT와 함께 실행된 ROWNUM은 숫자가 그 상태로 고정이 된다.

     

    그리고 메인쿼리는 고정된 ROWNUM을 가진 서브쿼리를 참조하게 된다.

     

    아래 쿼리를 실행해보자.

     

     

    고정된 ROWNUM을 가진 아래와 같은 결과를 얻을 수 있다.

     

     

     

    그리고 이 고정된 ROWNUM을 바탕으로 아래와 같이 번호로 데이터를 추출할 수도 있다.

     

Designed by Tistory.