Offset 과 Limit

황상익·2024년 11월 6일

1 . Limit

결과중 몇개 까지만 가져오기

SELECT * FROM 테이블명 LIMIT 10; -- 처음 부터 10개만 출력하기 (1 ~ 10)

2. Offset

SELECT * FROM 테이블명 ORDERS LIMIT 20 OFFSET 5; -- 5번째 행 부터 25행 까지 출력 (6 ~ 25)

-- limit 5, 20 과 같다고 보면 된다.
SELECT * FROM 테이블명 ORDERS LIMIT 5, 20

[출처 Code](출처: https://inpa.tistory.com/entry/MYSQL-📚-LIMIT-OFFSET#limit [Inpa Dev 👨‍💻:티스토리])

3. Offset과 Limit

limit은 가져올 데이터 양, offset은 가져올 초기 값
Paging 을 하기위해서 0 부분을 변수로 지정하여, 페이지를 이동할때마다 해당 페이지의 offset 값을 계산

  //Page로 update 날짜 내림차순 조회
    public Page<Schedule> findAllOrderByUpdatedDateDesc(SearchDto searchDto) {

        int limit = searchDto.getLimit();
        int offset = searchDto.getOffset();

        // 전체 레코드 수를 계산하는 쿼리
        String countSql = "SELECT COUNT(*) FROM schedule";
        Long totalCount = jdbcTemplate.queryForObject(countSql, Long.class);

        if (totalCount == 0 || offset >= totalCount) {
            return new PageImpl<>(Collections.emptyList(), PageRequest.of(offset / limit, limit), totalCount);
        }

        String sql = """
                SELECT s.*, 
                       m.id AS member_id, m.user_id AS user_id, m.password AS member_password, 
                       m.name AS member_name, m.email AS member_email, m.updated_at AS member_updated_at
                  FROM schedule s
                  LEFT JOIN member m ON s.member_id = m.id
                 ORDER BY s.updated_at DESC
                 LIMIT ? OFFSET ?
            """;

        List<Schedule> schedules = jdbcTemplate.query(sql, new Object[]{limit, offset}, scheduleRowMapper());

        return new PageImpl<>(schedules, PageRequest.of(offset / limit, limit), totalCount);
    }
profile
개발자를 향해 가는 중입니다~! 항상 겸손

0개의 댓글