Completion over Perfection

[오라클][SQL] DB에서 특정 순번 (rownum) 이후의 값 추출하는 방법 본문

카테고리 없음

[오라클][SQL] DB에서 특정 순번 (rownum) 이후의 값 추출하는 방법

난차차 2024. 12. 11. 12:29
반응형

 

* 아래 내용은 오라클 DB를 기준으로 작성했습니다.

 

일반적으로 많이 사용하는 특정 rownum 이하의 값을 추출하는 것은 다들 아실 거다. 

아래와 같이 쿼리를 짜면 특정 순번 (rownum) 이하의 값이 추출된다. 

(아래의 예시 코드대로라면 10번째까지의 DB 행값들이 출력이 될 것이다)

 

select * from your_table
	where rownum < 10;

 

 

 

근데 특정 순번 이후의 값만 출력을 하고 싶을 때가 있다. 

그럴 경우, 아래와 같이 쓰면 출력이 안되고 아무 값도 나오지 않는다. 

 

select * from your_table 
	where rownum > 10;

 

 

그 이유는 rownum의 경우, 쿼리가 전부 다 실행되고 결과값이 나온 이후에 넘버링이 되기 때문이라고 한다. 

 

그래서 서브쿼리를 활용해야 한다. 

10 이상의 rownum를 가지는 값들을 출력하려면 아래와 같이 짜면 된다. 

 

select * from (
	select t.*, rownum as rn from 
    	your_table t
    )
where rn > 10;

 

 

위의 쿼리는 Oracle 기준이고 다른 DB를 쓴다면 방법이 조금씩 다르다고 한다. 

 

다른 DB들은 아래 예시들을 참고하자. 

 

- MySQL

MySQL에서는 ROW_NUMBER() 윈도우 함수를 사용 (MySQL 8.0 이상)

 

WITH numbered_rows AS (
    SELECT t.*, ROW_NUMBER() OVER (ORDER BY some_column) AS rn
    FROM your_table t
)
SELECT *
FROM numbered_rows
WHERE rn >= 5;
 

- PostgreSQL

PostgreSQL은 ROW_NUMBER()를 사용

WITH numbered_rows AS (
    SELECT t.*, ROW_NUMBER() OVER (ORDER BY some_column) AS rn
    FROM your_table t
)
SELECT *
FROM numbered_rows
WHERE rn >= 5;

 

 

- SQL Server

SQL Server도 ROW_NUMBER()를 사용

 
WITH numbered_rows AS (
    SELECT t.*, ROW_NUMBER() OVER (ORDER BY some_column) AS rn
    FROM your_table t
)
SELECT *
FROM numbered_rows
WHERE rn >= 5;

 

 

반응형
Comments