[MySQL] 3.7 데이터 필터링 - LIMIT


http://www.mysqltutorial.org 내용을 따라 익히며 정리한 글입니다. 예시에 나오는 데이터셋은 MySQL 샘플 데이터셋인 classicmodels DB입니다.


1. LIMIT 소개

LIMITSELECT 문에서 결과값 수를 제한할 때 사용한다.
하나 혹은 두 개의 아규먼트를 받는다. 아규먼트는 0 또는 양의 정수여야 한다. 다음과 같이 사용한다.

SELECT
column1,column2,...
FROM
table
LIMIT offset , count;
  • offset : 리턴하기 시작할 행 넘버를 지정한다. (첫 행이 0번이다)
  • count : 리턴할 행의 수를 지정한다

2. LIMIT 로 N번째 행까지 가져오기

customers 테이블에서 5번째 행까지의 고객번호, 고객명, 신용한도를 가져와보자.

SELECT
customernumber,
customername,
creditlimit
FROM
customers
LIMIT 5;
+----------------+----------------------------+-------------+
| customernumber | customername | creditlimit |
+----------------+----------------------------+-------------+
| 103 | Atelier graphique | 21000.00 |
| 112 | Signal Gift Stores | 71800.00 |
| 114 | Australian Collectors, Co. | 117300.00 |
| 119 | La Rochelle Gifts | 118200.00 |
| 121 | Baane Mini Imports | 81700.00 |
+----------------+----------------------------+-------------+
5 rows in set (0.00 sec)

offset 아규먼트에 0을 넣는 것과 아무것도 넣지 않는 것은 같다. 즉, LIMIT 5LIMIT 0, 5 과 같은 결과를 리턴한다.

3. LIMIT 로 상위값들, 하위값들 가져오기

LIMITORDER BY 와 같이 자주 쓰인다.

customers 테이블에서 신용한도 상위 5명의 고객번호, 고객명, 신용한도를 내림차순으로 가져오려면 다음과 같이 작성한다.

SELECT
customernumber,
customername,
creditlimit
FROM
customers
ORDER BY
creditlimit DESC
LIMIT 5;
+----------------+------------------------------+-------------+
| customernumber | customername | creditlimit |
+----------------+------------------------------+-------------+
| 141 | Euro+ Shopping Channel | 227600.00 |
| 124 | Mini Gifts Distributors Ltd. | 210500.00 |
| 298 | Vida Sport, Ltd | 141300.00 |
| 151 | Muscle Machine Inc | 138500.00 |
| 187 | AV Stores, Co. | 136800.00 |
+----------------+------------------------------+-------------+
5 rows in set (0.00 sec)

하위 5명을 오름차순으로 가져오려면 DESC 대신 ASC 을 사용해 다음과 같이 작성한다.

SELECT
customernumber,
customername,
creditlimit
FROM
customers
ORDER BY
creditlimit ASC
LIMIT 5;
+----------------+----------------------------+-------------+
| customernumber | customername | creditlimit |
+----------------+----------------------------+-------------+
| 223 | Natürlich Autos | 0.00 |
| 168 | American Souvenirs Inc | 0.00 |
| 169 | Porto Imports Co. | 0.00 |
| 206 | Asian Shopping Network, Co | 0.00 |
| 125 | Havel & Zbyszek Co | 0.00 |
+----------------+----------------------------+-------------+
5 rows in set (0.01 sec)

4. LIMIT 로 상위 N번째 값 가져오기

상품 중 가장 비싸거나 가장 싼 상품을 찾으려면 MAXMIN 등을 사용할 수 있다. 하지만 세 번째로 비싼 상품을 찾으려면?

  1. 먼저 결과값을 내림차순으로 정렬해보자.
SELECT
productName,
buyprice
FROM
products
ORDER BY
buyprice DESC;
+---------------------------------------------+----------+
| productName | buyprice |
+---------------------------------------------+----------+
| 1962 LanciaA Delta 16V | 103.42 |
| 1998 Chrysler Plymouth Prowler | 101.51 |
| 1952 Alpine Renault 1300 | 98.58 |
| 1956 Porsche 356A Coupe | 98.30 |
| 2001 Ferrari Enzo | 95.59 |
| 1968 Ford Mustang | 95.34 |
  1. 가져와야 할 값은 Alpine Renault 1300 이다. 위 쿼리에 LIMIT 2, 1 을 추가하면 아래처럼 ‘2번행(첫 줄이 0번행)부터 1개 행을 리턴’한다.
SELECT
productName,
buyprice
FROM
products
ORDER BY
buyprice DESC
LIMIT 2, 1;
+--------------------------+----------+
| productName | buyprice |
+--------------------------+----------+
| 1952 Alpine Renault 1300 | 98.58 |
+--------------------------+----------+
1 row in set (0.00 sec)
© 2019 THE DATASCIENTIST All Rights Reserved.
Theme by hiero