Windows · SQLite 3.45.3. 본문의 첫 예제를 실행하여 표준 출력과 예상 결과가 일치함을 확인했습니다. 연습문제의 모든 입력을 검증한 것은 아닙니다.
이 글의 순서 4개 단락
조건에 맞는 상품 중에서 가장 저렴한 두 개를 고르려면 가격으로 정렬한 뒤 결과 개수를 제한하면 됩니다. 이 강의는 SQLite를 기준으로 합니다.
정렬과 개수 제한의 기준
ORDER BY는 조회 결과의 순서를 정합니다. 숫자에 ASC를 붙이면 작은 값부터, DESC를 붙이면 큰 값부터 정렬합니다. 방향을 생략하면 ASC가 기본입니다. LIMIT 뒤에는 반환할 행의 최대 개수를 적습니다.
WHERE와 함께 사용할 때는 WHERE, ORDER BY, LIMIT 순서로 작성합니다. 결과를 이해할 때는 조건에 맞는 행을 고르고, 그 행을 정렬한 다음, 앞에서 지정한 개수만 남긴다고 생각하면 됩니다. SQLite 공식 SELECT 문서
조건에 맞는 상품 중 저렴한 두 개 조회하기
다음 예제의 입력은 이름, 분류, 가격으로 이루어진 상품 네 행입니다. 별도 테이블이나 파일 없이 실행할 수 있도록 WITH와 VALUES로 이 문장에서만 사용할 임시 상품 목록 products를 만듭니다. VALUES의 각 괄호가 한 행이며, 괄호 안의 값은 name, category, price 순서에 대응합니다.
WITH products(name, category, price) AS (
VALUES
('연필', '문구', 1000),
('공책', '문구', 3000),
('지우개', '문구', 1000),
('머그컵', '생활', 5000)
)
SELECT name, price
FROM products
WHERE category = '문구'
ORDER BY price ASC, name ASC
LIMIT 2;

예상 결과는 다음과 같습니다. 구분선과 열 너비는 사용하는 SQLite 실행 환경에 따라 다를 수 있습니다.
name | price
연필 | 1000
지우개 | 1000
WHERE가 문구 세 행을 고릅니다. ORDER BY price ASC는 가격이 낮은 행부터 정렬합니다. 연필과 지우개의 가격은 같으므로 두 번째 기준인 name ASC로 순서를 정합니다. 마지막으로 LIMIT 2가 앞의 두 행을 반환하므로 공책은 결과에 포함되지 않습니다.
흔한 실수와 경계 조건
ORDER BY를 생략하면 반환 순서가 보장되지 않습니다. 특히LIMIT만 사용하면 원하는 가격순 상위 상품을 고를 수 없습니다.DESC는 높은 가격부터 정렬합니다. 가장 비싼 상품을 찾을 때 사용하고, 가장 저렴한 상품을 찾을 때는ASC를 사용합니다.- 첫 번째 정렬 값이 같으면 그 행들의 순서는 정해지지 않습니다. 예제처럼 다음 기준을 추가하세요. 추가 기준까지 같다면 그 행들 사이의 순서도 보장되지 않습니다.
- 조건에 맞는 행이
LIMIT보다 적으면 있는 행만 반환합니다. 조건에 맞는 행이 없거나LIMIT 0이면 결과 행이 없습니다.LIMIT은 빠진 행을 채우지 않습니다. SQLite 공식 LIMIT 문서
연습과 풀이
같은 상품 목록에서 문구 상품 중 가격이 높은 순서로 두 개를 조회해 보세요. 가격이 같으면 이름 오름차순으로 정렬합니다.
WITH products(name, category, price) AS (
VALUES
('연필', '문구', 1000),
('공책', '문구', 3000),
('지우개', '문구', 1000),
('머그컵', '생활', 5000)
)
SELECT name, price
FROM products
WHERE category = '문구'
ORDER BY price DESC, name ASC
LIMIT 2;
예상 결과는 공책 3000, 연필 1000 순서입니다. 공책이 가장 비싸고, 같은 가격의 연필과 지우개 중에서는 이름 오름차순인 연필이 먼저이기 때문입니다.
CHECK THE SOURCE
참고한 공식 문서
기능 설명은 위 문서를 참고했으며, 예제의 입력·결과와 한계는 본문에 따로 기록했습니다.