티스토리 뷰

728x90

SQL 스터디에 참여하고 있는데, "총매출이 2번째로 높은 공급자의 id, 이름, 총매출을 조회해 주세요."의 쿼리문을 작성해야했다. 나는 이 문제를 "총매출이 큰 순서로 정렬하고 2번째 행을 검색한다."는 관점으로 접근했다. 이는 SELECT 문의 LIMIT 절을 이용해 구현할 수 있었다.

 

MySQL 8.0 Documentations 으로 학습한 내용을 정리했다. Spring을 학습하는 과정에서 공식 문서를 좀 읽다보니 점점 다른 공식 문서도 좀 읽어보게 되는 것 같다😊

 

LIMIT

The LIMIT clause can be used to constrain the number of rows returned by the SELECT statement. LIMIT takes one or two numeric arguments, which must both be nonnegative integer constants.

LIMIT 절을 사용하여 SELECT 문이 검색하는 행 수를 제한할 수 있다. LIMIT절은 하나 또는 두 개의 숫자를 인수로 가지며, 둘 다 음이 아닌 정수여야한다. LIMIT 절은 ORDER BY 절 다음에 사용한다.

image

 

행 수를 2개로 제한한다. → 1-2행이 검색된다.

SELECT * FROM tbl LIMIT 2;  # Retrieve rows 1-2

 

OFFSET of LIMIT

With two arguments, the first argument specifies the offset of the first row to return, and the second specifies the maximum number of rows to return. The offset of the initial row is 0 (not 1).

LIMIT 절에 두 개의 인수를 사용하는 경우 첫 번째 인수는 OFFSET을 의미하며 건너뛰는 행의 개수를 지정하고, 두 번째 인수는 제한하는 행의 개수를 지정한다.

 

처음 5개의 행을 건너뛰고, 행 수를 10개로 제한한다. → 6-15행이 검색된다.

SELECT * FROM tbl LIMIT 5,10;  # Retrieve rows 6-15

OFFSET의 기본값은 0으로, 아래의 두 쿼리문은 같다.

SELECT * FROM tbl LIMIT 2;  # Retrieve rows 1-2
SELECT * FROM tbl LIMIT 0, 2;

다음과 같이 OFFSET을 명시적으로 지정해 사용할 수 있다. (순서가 반전됨에 주의하자!)

SELECT * FROM tbl LIMIT 10 OFFSET 5;  # Retrieve rows 6-15

처음 95개의 행을 건너뛰고, 모든 행을 검색한다. → 96-끝행이 검색된다.

LIMIT 절에 두번째 인자로 매우 큰 값을 사용하면 끝행까지 검색된다. (행 수가 제한되지 않는다.)

SELECT * FROM tbl LIMIT 95,18446744073709551615;
728x90
댓글
공지사항
최근에 올라온 글