본문 바로가기

Languages/SQL

[SQL] 11. 결과 행 제한하기 - LIMIT

728x90
반응형

0. LIMIT

SELECT 명령에서는 결괏값으로 반환되는 행을 제한할 수 있다. 바로 LIMIT을 활용하는 것이다. LIMIT을 통해 원하는 행만 출력할 수 있다. 쇼핑몰 사이트에서 원하는 조건에 해당하는 상품만 보기를 원할 때 사용할 수 있을 것이다.

 

 

1. 행수 제한

LIMIT 구는 표준 SQL은 아니다. MySQL과 PostgresSQL에서 사용할 수 있다. LIMIT 구는 SELECT 명령의 마지막에 지정하는 것으로 WHERE이나 ORDER BY 뒤에 들어간다. 

 

LIMIT 다음에는 최대 행수를 숫자로 지정한다. LIMIT 10이라면 최대 10개의 행을 반환한다는 것이다. 다음 sample33을 보자.

sample33은 no만 가지는 테이블이다. sample33에 대해서 LIMIT를 사용해본다.

SELECT * FROM sample33 LIMIT 3;

3개의 행이 반환되었다. LIMIT로 지정하는 것은 '최대 행수'이다. 만약 테이블에 하나의 행만 있다면 LIMIT 3일지라도 하나의 행만 나온다.

 

정렬한 후 제한하기

위 코드에서는 WHERE 구로도 같은 결과를 보일 수 있다. 하지만 LIMIT와 WHERE은 기능과 내부 처리 순서가 다르다. LIMIT은 WHERE로 검색한 후 ORDER BY로 정렬된 뒤 최종적으로 처리된다. 즉 LIMIT의 처리 순서가 가장 늦다. 만약 테이블을 no에 대해서 역순으로 정렬한 후 LIMIT을 사용하면 다음과 같이 나온다.

SELECT * FROM sample33 ORDER BY no DESC LIMIT 3;

 

LIMIT를 사용할 수 없는 데이터베이스에서의 행 제한

LIMIT는 표준 SQL이 아니기 때문에 어떤 데이터베이스에서는 사용할 수 없을 수도 있다. SQL server에서는 LIMIT와 비슷한 기능을 하는 TOP을 사용할 수 있다.

SELECT TOP 3 * FROM sample33;

 

Oracle에는 LIMIT과 TOP 둘 다 없다. 대신 ROWNUM이라는 열을 사용해 WHERE 구로 조건을 지정하여 행을 제한할 수 있다.

SELECT * FROM sample33 WHERE ROWNUM <= 3;

ROWNUM은 클라이언트에게 결과가 반환될 때 각 행에 할당되는 행 번호이다. 단 ROWNUM은 WHERE 구로 지정하므로 정렬하기 전에 처리되어 LIMIT를 사용했을 때 결과와 다를 수 있다.

 

 

2. 오프셋 지정

웹 시스템에서는 클라이언트의 브라우저를 통해 페이지 단위로 화면에 표시할 내용을 처리한다. 대량의 데이터를 하나의 페이지에 표시하는 것은 기능적으로도 속도 측면에서도 효율적이지 못하므로 일반적으로 페이지 나누기 기능을 사용한다. 웹 사이트에서 게시판 하단에 '1 2 3 4 5 다음'과 같이 표시되는 것들이다.

 

페이지 나누기 기능은 LIMIT를 사용해 간단하게 구현할 수 있다. 한 페이지당 5건의 데이터를 표시하도록 한다면 첫 번째 페이지는 LIMIT 5로 결괏값을 표시하면 된다. 그다음 페이지는 6번째 행부터 5건의 데이터를 표시하도록 하면 된다. 이때 '6번째 행부터'라는 표현은 결괏값으로부터 데이터를 취득할 위치를 가리키는 것으로 LIMIT 구에 OFFSET으로 지정할 수 있다. OFFSET은 LIMIT 뒤에 쓴다. OFFSET 0은 OFFSET을 안 쓰는 것과 같은 결과를 내며 생략 가능하다.

 

SELECT * FROM sample33 LIMIT 3 OFFSET 3;

728x90
반응형

'Languages > SQL' 카테고리의 다른 글

[SQL] 13. 문자열 연산  (0) 2021.07.22
[SQL] 12. 수치 연산  (0) 2021.07.20
[SQL] 10. 복수의 열을 지정해 정렬하기  (0) 2021.05.18
[SQL] 9. 정렬 - ORDER BY  (0) 2021.05.08
[SQL] 8. 패턴 매칭에 의한 검색  (0) 2021.04.12