본문 바로가기
SQL(MySQL)

[MySQL] 02. LIMIT과 OFFSET

by ssunooo 2024. 10. 7.

 

 

LIMIT x, y

 

  • y개 만큼의 행을 반환하되, 처음 x개의 행을 건너뜀
SELECT * FROM BOARD LIMIT 5, 10;

 

BOARD 테이블에서 5개 행을 건너뛰고 10개의 행을 반환

결과적으로 6번째부터 15번째까지의 행이 반환

 

 

LIMIT x OFFSET y

 

  • y개 만큼의 행을 건너뛰고, 다음 x개의 행을 반환
  • OFFSET은 행을 건너뛰는 수를 명확하게 지정하는 역할
SELECT * FROM BOARD LIMIT 5 OFFSET 10;

 

BOARD 테이블에서 10개 행을 건너뛰고 5개의 행을 반환

결과적으로 11번째부터 15번째까지의 행이 반환

 

 

표기법: LIMIT x, y는 y가 반환할 행의 수로 해석되며, LIMIT x OFFSET y는 y가 건너뛸 행의 수로 해석

 

<LIMIT을 활용한 쿼리문>

//(페이지 네이션) 암벽장 전체출력
	private String ALL = "SELECT \r\n"
			+ "    GYM_NUM, \r\n"
			+ "    GYM_NAME, \r\n"
			+ "    GYM_PROFILE, \r\n"
			+ "    GYM_DESCRIPTION, \r\n"
			+ "    GYM_LOCATION, \r\n"
			+ "    GYM_RESERVATION_CNT, \r\n"
			+ "    GYM_PRICE, \r\n"
			+ "    BATTLE_NUM, \r\n"
			+ "    BATTLE_GAME_DATE\r\n"
			+ "FROM (\r\n"
			+ "    SELECT \r\n"
			+ "        G.GYM_NUM, \r\n"
			+ "        G.GYM_NAME, \r\n"
			+ "        G.GYM_PROFILE, \r\n"
			+ "        G.GYM_DESCRIPTION, \r\n"
			+ "        G.GYM_LOCATION, \r\n"
			+ "        G.GYM_RESERVATION_CNT, \r\n"
			+ "        G.GYM_PRICE, \r\n"
			+ "        B.BATTLE_NUM, \r\n"
			+ "        B.BATTLE_GAME_DATE,\r\n"
			+ "        ROW_NUMBER() OVER (PARTITION BY G.GYM_NAME ORDER BY G.GYM_NUM) AS RN_G,"  // GYM_NAME별로 순번 부여\r\n
			+ "        ROW_NUMBER() OVER (ORDER BY G.GYM_NUM) AS ROW_INDEX\r\n"
			+ "    FROM \r\n"
			+ "        GYM G\r\n"
			+ "    LEFT JOIN \r\n"
			+ "        BATTLE B ON G.GYM_NUM = B.BATTLE_GYM_NUM\r\n"
			+ ") AS GYM_BATTLE_CTE\r\n"
			+ "WHERE RN_G = 1\r\n"
			+ "ORDER BY GYM_NUM\r\n"
			+ "LIMIT X, Y";  // X,Y는 시작 인덱스와 행 수를 위한 자리 표시자입니다.

 

 

<LIMIT과 OFFSET을 활용한 쿼리문>

//(페이지 네이션) 암벽장 전체출력
	private String ALL = "SELECT \r\n"
			+ "    GYM_NUM, \r\n"
			+ "    GYM_NAME, \r\n"
			+ "    GYM_PROFILE, \r\n"
			+ "    GYM_DESCRIPTION, \r\n"
			+ "    GYM_LOCATION, \r\n"
			+ "    GYM_RESERVATION_CNT, \r\n"
			+ "    GYM_PRICE, \r\n"
			+ "    BATTLE_NUM, \r\n"
			+ "    BATTLE_GAME_DATE\r\n"
			+ "FROM (\r\n"
			+ "    SELECT \r\n"
			+ "        G.GYM_NUM, \r\n"
			+ "        G.GYM_NAME, \r\n"
			+ "        G.GYM_PROFILE, \r\n"
			+ "        G.GYM_DESCRIPTION, \r\n"
			+ "        G.GYM_LOCATION, \r\n"
			+ "        G.GYM_RESERVATION_CNT, \r\n"
			+ "        G.GYM_PRICE, \r\n"
			+ "        B.BATTLE_NUM, \r\n"
			+ "        B.BATTLE_GAME_DATE,\r\n"
			+ "        ROW_NUMBER() OVER (PARTITION BY G.GYM_NAME ORDER BY G.GYM_NUM) AS RN_G,"  // GYM_NAME별로 순번 부여\r\n
			+ "        ROW_NUMBER() OVER (ORDER BY G.GYM_NUM) AS ROW_INDEX\r\n"
			+ "    FROM \r\n"
			+ "        GYM G\r\n"
			+ "    LEFT JOIN \r\n"
			+ "        BATTLE B ON G.GYM_NUM = B.BATTLE_GYM_NUM\r\n"
			+ ") AS GYM_BATTLE_CTE\r\n"
			+ "WHERE RN_G = 1\r\n"
			+ "ORDER BY GYM_NUM\r\n"
			+ "LIMIT Y OFFSET X";  // Y,X는 시작 인덱스와 행 수를 위한 자리 표시자입니다.

 

 

 

2024.10.07