[DB] DML: 검색문 SELECT의 LIMIT절

젠니·2023년 5월 27일
0

데이터베이스

목록 보기
8/21

5. LIMIT절

SELECT문이 출력하는 최대 튜플 수를 제한한다.

ORDER BY절과 함께 사용하면 순서의 최대값을 정의한다.

Format

SELECT 		[ALL|DISTINCT] {{컬럼명 [[AS] 컬럼_별칭],}⁺|*}
FROM 		테이블_리스트
[WHERE 		투플_조건식]
[GROUP BY 	컬럼명 [HAVING 그룹_조건식]]
[ORDER BY 	{컬럼명|컬럼_별칭|컬럼_위치 [ASC|DESC],}⁺]
[LIMIT 		[offset, ] row_count];
  • offset: 결과에 포함할 첫번째 튜플의 위치 (디폴트는 '0')
  • row_count: 결과로 리턴할 튜플의 최대 수

Example
가장 규모가 큰 3개 경기장을 출력하라.

SELECT 		STADIUM_ID, STADIUM_NAME, SEAT_COUNT
FROM 		STADIUM
ORDER BY 	SEAT_COUNT DESC, STADIUM_NAME
LIMIT 		3; 					// LIMIT 0, 3과 같다.

최대 3개의 튜플을 출력한다.

좌석 수 기준 규모로 11번째부터 15번째까지의 경기장을 출력하라. (11위, 15위가 아님)

SELECT 		STADIUM_ID, STADIUM_NAME, SEAT_COUNT
FROM 		STADIUM
ORDER BY 	SEAT_COUNT DESC, STADIUM_NAME
LIMIT 		10, 5

index가 0부터 시작하기 때문에 11번째부터면 index 10을 써준다.

Top-N Query

순위가 높은 n개의 튜플을 검색한다. 추가로, 동점자 처리 기능을 수행한다.

  • RANK(): 동점자 처리
  • ROW_NUMBER(): 순번 부여
SELECT 	ROW_NUMBER() OVER (ORDER BY SEAT_COUNT DESC) AS ROW_NUM,
		STADIUM_ID, STADIUM_NAME, SEAT_COUNT,
		RANK() OVER (ORDER BY SEAT_COUNT DESC) AS SEAT_RANK
FROM 	STADIUM;

참고로 여기서 ORDER BY절은 사용할 수 없다. 왜냐하면 ORDER BY절은 기준 컬럼을 기준으로 정렬하기 때문이다.

SELECT문에서는 ORDER BY가 완료된 후 데이터가 출력되는 것이 아니라, 먼저 검색한 후, 마지막으로 ORDER BY 작업이 실행된다.
-> 말 그대로, 출력에만 관여하는 것이다.

< SELECT문의 실행 순서 >

profile
젠니의 개발 라이푸우

0개의 댓글