SQL/MySQL

MySQL LIMIT OFFSET 사용법 예제 쉬운 정리

진리뷰 2023. 9. 29. 09:00
반응형

 

MySQL-LIMIT-OFFSET-사용법-예제-쉬운-정리-썸네일
LIMIT OFFSET 사용법, 예제 쉬운 정리

 

 

이 글은 MySQL LIMIT과 LIMIT OFFSET 사용법 및 예제를 쉽게 정리한 글입니다.

 

 

 

MySQL LIMIT OFFSET

 

출력할 행(레코드) 수 지정할 때, 페이징 처리에 사용한다.

*페이징 처리: 화면 내 보이는 데이터 범위를 지정하는 방법, 웹사이트 게시판에서 흔히 보임 (ex. 1, 2, 3,... 다음>).

페이징처리-예시-네이버-뉴스
페이징 처리 예시 (네이버 사회 뉴스)

 

 

 

MySQL LIMIT 사용법

 

LIMIT은 특정 개수의 행만 출력할 때 사용합니다.

SELECT [컬럼명]
FROM [테이블명]
WHERE [조건식]
LIMIT [출력할 행 개수];

 

 

 

MySQL LIMIT 사용법 예제

 

샘플 테이블 score_info입니다.

class score
eng 89
math 90
art 65
history 74
music 59
p.e 94

 

SELECT class, score
FROM score_info
WHERE scroe >= 70  -- 70 이상 score만 선택
ORDER BY score DESC  -- score 내림차순
LIMIT 3;  -- 행 3개만 출력

 

LIMIT 3 없이, ORDER BY까지만 실행한다면 총 4개의 행이 출력됩니다.

  • 94(p.e), 90(math), 89(eng), 74(history)

하지만 LIMIT 3은 행 3개만 출력하는 것이므로 score 94, 90, 89만 출력됩니다.

 

class score
p.e 94
math 90
eng 89

 

 

 

MySQL LIMIT OFFSET

 

LIMIT OFFSET은 시작행부터 특정 행 개수만 출력합니다.

즉, 부분적으로 원하는 범위만 지정할 때 사용합니다.

 

이때 시작행 입력 시 유의할 점은 1행은 숫자 0이라는 점입니다.

예를 들어, 세 번째 행을 시작점으로 네 개의 행을 출력하려면 LIMIT 4 OFFSET 2;

>> 3, 4, 5, 6 행만 출력됨. 

SELECT [컬럼명]
FROM [테이블명]
WHERE [조건식]
LIMIT [출력할 행 개수] OFFSET [시작 행];

 

OFFSET은 생략 가능합니다. 하지만 LIMIT절 문법이 달라지는 점 유의하세요!

OFFSET 입력 시, OFFSET 뒤에 시작행 입력합니다.

반면 생략하면, LIMIT 뒤에 시작행 입력합니다.

'입력OFFSET시작, 생략LIMIT시작'으로 기억하면 좋습니다...

 

SELECT [컬럼명]
FROM [테이블명]
WHERE [조건식]
LIMIT [시작 행], [출력할 행 개수];   -- 콤마(,) 입력해서 OFFSET 생략, 문법 바뀜.

 

 

 

MySQL LIMIT OFFSET 사용법 예제

 

조금 변형한 샘플 테이블 score_info입니다.

class score
eng 89
math 90
art 65
history 89
music 59
p.e 94

 

SELECT class, score, ROW_NUMBER()OVER(ORDER BY score DESC) rank 
FROM score_info
WHERE score >= 70
LIMIT 1, 3;  --  2번째 행부터 3개 행만 출력.

 

2번째 행부터 3개 행만 출력했기에 가장 높은 점수(94)는 제외되었습니다.

그리고 두 번째로 높은 점수(90)부터 3개의 행(90, 89, 89)만 출력되었습니다.

class score rank
math 90 2
eng 89 3
history 89 4

 


 

만약 LIMIT OFFSET 없이, WHERE절까지만 실행하면 다음과 같습니다.

(score 기준 70 이상, 공동 순위 없이, 내림차순 정렬)

class score rank
p.e 94 1
math 90 2
eng 89 3
history 89 4

 

*ROW_NUMBER함수는 공동 순위 없이 순위를 정렬할 때 사용합니다. 때문에 eng과 history의 score는 같지만, rank가 다릅니다.

*순위 관련 추천 글

반응형
top