DB/PostgreSQL

3. 데이터 출력결과의 행 갯수를 제한 | LIMIT, OFFSET

DEV-HJ 2022. 10. 26. 22:32
반응형
SELECT ...
FROM 테이블
[WHERE ...]
[OEDER BY ...]
[LIMIT {출력행수 | ALL}] [OFFSET 건너뛸행수]

위 SELECT 문장의 5번 라인에 보이는 것처럼 LIMIT 다음에 출력할 행 수를 지정한다.

출력할 행 수는 일반적으로 양의 정수일 때 의미가 있으며, 출력할 행의 개수 대신 ALL이나 빈값(NULL)이 지정되면

LIMIT 절을 생략한 것과 동일하게 처리되어결과 집합의 모든 행이 출력된다.

출력할 행 수에 0을 지정하면 공집합(EMPTY SET) 이 반환된다.

 

위 SELECT 문장의 5번 라인에 제시된 OFFSET은 검색 결과 집합을 출력할때 건너뜀 행 수 를 지정한다.

 

즉, 검색결과 집합을 출력할 때 LIMIT 절을 사용하여 먼저 출력한 행이 있다면 그 행들을 건너뛰어 다음 행부터 출력하기 위한 목적으로 사용된다.

건너뛴다는 의미는 결과 집합의 첫 행부터 시작하여 OFFSET 절에 지정한 행 수를 지날 때까지는 결과 집합을 스캔만 하고,

지정한 행 수를 지나면 그 때부터 출력을 시작한다는 의미이다.

 

이 때 LIMIT 절이 있으면 LIMIT 절에 지정한 행 수까지만 출력이 되고,

LIMIT 절을 지정하지 않았으면 OFFSET절에 지정한 행 수를 지난 지점부터 결과 집합의 끝까지 모든 행이 출력된다.

LIMIT 절에 지정한 출력할 행 수보다 결과 집합 자체가 남은 결과 집합의 행 수가 적으면 이 제한값 이하의 행 수로 출력될 수 있다.

 

OFFSET 절의 건너뛸 행 수에 0이나 빈값(NULL)이 지정되면 OFFSET 절을 생략한 것과 동일하고,

결과 집합의 전체 행 수보다 큰 값을 지정하면 공집합이 반환된다.

 

PostgreSQL에서 LIMIT와 OFFSET 뒤에는 추가적인 키워드 없이 각각의 의미에 해당하는 숫자만 지정하면 된다.

 


< 간단요약 >

LIMIT으로 데이터 100개중 40개만 나와라 하면 40개 나올수있고 ,

LIMIT 40 뒤에 OFFSET 30 이 있으면 40개의 데이터 다음 데이터부터! 30개만 출력된단 뜻이다.


< 주의 >

OFFSET 절을 사용할 때 건너뛸 행 수가 커질수록 읽고 버릴 행도 늘어나 비효율이 커지고, 그만큼 쿼리 수행성능도 나빠질 수있다는 점을 고려해야 한다.

 

 

반응형