모르면 배우면 된다
ORACLE의 ROWNUM에 대하여 본문
ROWNUM을 업무에서 쓰다가 개념 정리해봄.
EX)
SELECT * FROM TABLE WHERE ROWNUM = 1;
1. ROWNUM은 언제 할당되는가?
SELECT 문에서 WHERE 절로 인해 ROW가 하나하나 필터링될 때마다 NUMBER가 한 개씩 붙는다.
즉 WHERE 절에 의해 첫 번쨰 행이 반환되면 1, 두 번째 행이 반환되면 2가 붙는다.
SQL 실행 순서에 따라, ORDER BY는 SELECT 마지막에 실행되기 때문에, ROWNUM을 붙인 다음에 ORDER BY를 실행한다.
같은 쿼리 안에서 ROWNUM과 ORDER BY를 쓰는 것은 통상적으로 적절하지 않다.
왜냐하면, 보통 정렬한 후에 ROWNUM을 붙이고 싶기 때문에.
2. 그렇다면 어떻게 사용하는 것이 적절한가?
SELECT ROWNUM, A.*
FROM (SELECT * FROM TABLE WHERE 조건 ORDER BY ~ ) A
WHERE ROWNUM <=10;
A 인라인뷰 안에서 이미 정렬이 된 채로 SELECT 결과가 나오면, 그 후에 10개를 자르는 방식.
3. 사용예시
ROWNUM <= 10 : 10개까지 출력
ROWNUM = 1 최상단 1개 출력
ROWNUM > 1 : 아무것도 출력 안 됨
ROWNUM = 3 : 아무것도 출력 안 됨
ROWNUM > 1이 출력되지 않는 이유 : WHERE 절에서 가져온 첫 번째 행에 1을 할당하는데, ROWNUM > 1로 인해 FALSE 반환. 두 번째 행에 1 할당하는데, 마찬가지로 FALSE 반환. ROWNUM = 3도 1 할당하는데 ROWNUM이 3이 아니라서 FALSE 반환. 그럼 다음 행에 또 1 할당.
출처 : https://docs.oracle.com/en/database/oracle/oracle-database/23/sqlrf/ROWNUM-Pseudocolumn.html#GUID-2E40EC12-3FCF-4A4F-B5F2-6BC669021726
'DB' 카테고리의 다른 글
SQL JOIN 개념 정리 (0) | 2022.06.24 |
---|---|
여러 테이블에서 가져온 데이터를 한 ROW로 묶으려면 어떻게 해야 할까 (0) | 2022.06.10 |
EXIST : 테이블에 값이 존재하는지 확인할 때 쓰는 것 (0) | 2022.05.02 |