반응형
Greensky0026
삽질러의 대환장 공사판
Greensky0026
전체 방문자
오늘
어제
  • 분류 전체보기 (241)
    • Language (56)
      • JAVA (13)
      • Swift (38)
      • Kotlin (4)
      • Dart (0)
      • PHP (0)
      • JavaScript (1)
    • IDE & Framework (92)
      • Spring (10)
      • Android (48)
      • iOS (8)
      • NodeJS (1)
      • CodeIgniter (3)
      • Flutter (1)
      • 분류중 (18)
    • Infra (8)
    • Database (12)
    • VCS (4)
    • Debug Log (34)
      • java (7)
      • swift (3)
      • Android (9)
      • Web (7)
      • 삽질기 (7)
    • Others (19)
      • 코딩테스트 풀이 (0)
      • IT 이야기 (18)
    • 쉼터 (2)
    • 개발공부 (14)
      • Network (1)
      • 자료구조와 알고리즘 (2)
      • Code design (8)
      • ETC (1)
      • 아카이브 (1)

블로그 메뉴

    공지사항

    • 프로그래머스 코딩 테스트 관련글 비공개 처리

    인기 글

    태그

    • kotlin
    • JSP
    • swfit
    • map
    • Android
    • 프로그래머스
    • IT
    • swift
    • level1
    • 프로그래밍
    • 예제
    • ios
    • 타입
    • reduce
    • 코딩테스트
    • 개발
    • Java
    • xcode
    • 구축
    • 공부

    최근 댓글

    최근 글

    티스토리

    hELLO · Designed By 정상우.
    Greensky0026

    삽질러의 대환장 공사판

    MySQL에서 LIMIT과 OFFSET을 사용해 Paging하기
    Database

    MySQL에서 LIMIT과 OFFSET을 사용해 Paging하기

    2021. 5. 13. 23:03
    반응형

     mysql에선 limit과 offset을 활용해서 페이징을 구현할 수 있으며, 퍼포먼스도 좋다.

    속성을 별도로 추가하지 않고 튜플의 출력위치를 설정할 수 있기 때문이다.

     

    SELECT *
    FROM paging
    ORDERS LIMIT 20 OFFSET 0
    
    SELECT *
    FROM paging
    ORDERS LIMIT 0, 20

    LIMIT은 출력할 행의 수이고 OFFSET은 가져올 데이터의 초기 위치값이다.

    위의 코드에서 ORDERS LIMIT 0, 20(OFFSET , LIMIT)은

    쿼리의 결과로 나온 튜플들의 0번째부터 20개를 출력한다는 말이다.

     

    그렇다면, 10개의 튜플씩 한 페이지가 되게끔 페이징을 한다면 쿼리문은 어떻게 되는가?

    글번호순으로 오름차순 출력한다고 한다면 아래와 같다.

    //1페이지 : 글번호 1~10
    SELECT * 
    FROM paging
    ORDER BY no ASC
    LIMIT 0, 10
    
    //2페이지 : 글번호 11~20
    SELECT * 
    FROM paging
    ORDER BY no ASC
    LIMIT 10, 10
    
    //1페이지 : 글번호 21~30
    SELECT * 
    FROM paging
    ORDER BY no ASC
    LIMIT 20, 10

     

    근데 보통 최신글을 1페이지로 하기 때문에, 오름차순이 아니라 내림차순으로 출력한다.

    SELECT * 
    FROM paging
    ORDER BY no DESC
    LIMIT 0, 10

    그럼 궁금해진다.

    그럼 23개가 끝인 데이터를 LIMIT 20, 10으로 불러오면 어떻게 될까?

    오류없이 정상적으로 21~23의 자료만을 반환한다.

    이말인즉슨, 

    전체 행의 갯수에 페이지당 출력할 튜플수를 나눠서 페이지의 갯수만 계산하면 되고,

    나머지는 Query로 처리를 할 수 있다는 이야기이다.

    반응형
    저작자표시

    'Database' 카테고리의 다른 글

    Procedure 기본  (0) 2022.05.03
    [MySQL] 방금 수행한 질의 대상 얻어오기  (0) 2021.08.04
    Workbench ERD로 DB 만들기  (0) 2021.04.16
    mac에서 MySQL Workbench 사용해보기  (0) 2021.04.16
    ERD(Entity-Relationship-Diagram) -이론  (0) 2021.04.16
      'Database' 카테고리의 다른 글
      • Procedure 기본
      • [MySQL] 방금 수행한 질의 대상 얻어오기
      • Workbench ERD로 DB 만들기
      • mac에서 MySQL Workbench 사용해보기
      Greensky0026
      Greensky0026
      점이 모여 선이 된다. 내 삽질도 언젠간 거대한 지하 도시가 되겠지!

      티스토리툴바