[ ROWNUM ]
: 조회 결과 순으로 ROWNUM을 부여한다. 같은 레벨에서 ORDER BY와 함께 사용 시 원하지 않는 결과가 나올 수 있다. 이러한 경우는 subQuery로 처리하여 해결이 가능하다.
& ORDER BY없이 ROWNUM 조회 시
SELECT
ROWNUM,
B.*
FROM
DEPT A
JOIN
EMP B
ON
A.DEPTNO = B.DEPTNO;

& ORDER BY, ROWNUM 함께 사용.
SELECT
ROWNUM,
B.*
FROM
DEPT A
JOIN
EMP B
ON
A.DEPTNO = B.DEPTNO
ORDER BY
EMPNO;

& subQuery를 통해 ORDER BY가 적용 된 상태로 ROWNUM 적용
SELECT
ROWNUM,
A.*
FROM
(
SELECT
B.*
FROM
DEPT A
JOIN
EMP B
ON
A.DEPTNO = B.DEPTNO
ORDER BY
EMPNO
) A;

& ORDER BY로 정렬하고자 하는 데이터가 중복되지 않는다면 RANK() 함수를 통해서 subQuery로 처리하지 않고 ROWNUM을 적용시킨 효과를 가져올 수 있다.
SELECT
RANK() OVER(ORDER BY EMPNO),
B.*
FROM
DEPT A
JOIN
EMP B
ON
A.DEPTNO = B.DEPTNO;

단, ORDER BY에 명시된 컬럼의 데이터가 중복 가능성이 있다면 해당 함수로는 ROWNUM을 대체 할 수 없다. (자세한 내용은 RANK(), DENSE RANK() 참조)
'DB & SQL' 카테고리의 다른 글
Oracle Stored Procedure 1장(프로시저 생성 및 저장) (0) | 2024.07.10 |
---|---|
Oracle ROW_NUMBER() OVER() (2) | 2024.07.10 |
Oracle XML (0) | 2024.06.26 |
Oracle JSON (0) | 2024.06.26 |
Transaction과 ACID표준 (0) | 2023.01.31 |