SQL 문제를 풀다보니 표준 SQL만 가지고는 해결하기 다소 어려운 문제들을 마주하게 되었고, 편리한 함수들을 더 찾아보게 되었다. LIMIT, OFFSET이라는 편리한 함수를 알게되어 여기에 정리해본다.
1. LIMIT, OFFSET
LIMIT과 OFFSET은 MySQL과 PostgreSQL에서 사용가능한 함수이다. 먼저 LIMIT은 출력하는 행의 개수를 제한한다.
사용법은 다음과 같이 아주 간단하다.
SELECT 칼럼 FROM 테이블 LIMIT N
위와 같이 사용하면 결과 테이블의 행이 N개만 나오게 된다.
OFFSET을 LIMIT 뒤에 사용하게 되며 어느 행부터 출력할지를 정해주는 역할을 한다.
SELECT 칼럼 FROM 테이블 LIMIT N OFFSET M
위와 같이 사용하면 (M+1)번째 행부터 N개의 행이 결과 테이블로 나오게 된다. OFFSET은 0일때가 1번째 행부터 출력됨에 주의해야 한다.
예시로 살펴봐야 이해가 더 잘 될 것 같다.
어제 만들어뒀던 테이블을 다시 가져와 보았다.
<제품> 테이블
제품명 | 가격 |
새우깡 | 1300 |
보석바 | 900 |
감자깡 | 1500 |
누가바 | 1000 |
쌍쌍바 | 1000 |
먹태깡 | 1700 |
참이슬 | 1900 |
스크류바 | 1000 |
고구마깡 | 1500 |
처음처럼 | 1900 |
옥수수깡 | 1600 |
바밤바 | 900 |
하이트 | 2000 |
위와 같은 제품 테이블에서 가장 가격이 낮은 것 순서대로 순위를 매긴 뒤 1등에서 5등까지만 출력되도록 만들어보고 싶다고 해보자. 가격이 같은 경우에는 제품명 순으로 순위가 정해진다.
SELECT 제품명, 가격, ROW_NUMBER() over (order by 가격, 제품명) 순위
FROM 제품
LIMIT 5
결과 테이블
제품명 | 가격 | 순위 |
바밤바 | 900 | 1 |
보석바 | 900 | 2 |
누가바 | 1000 | 3 |
스크류바 | 1000 | 4 |
쌍쌍바 | 1000 | 5 |
Limit으로 5개 행만 결과로 나오도록 제한했기 때문에 5등까지만 출력된 것을 볼 수 있다.
이번에는 위와 같은 상황에서 6등~10등까지만 출력하고싶다고 해보자.
SELECT 제품명, 가격, ROW_NUMBER() over (order by 가격, 제품명) 순위
FROM 제품
LIMIT 5 OFFSET 5
결과 테이블
제품명 | 가격 | 순위 |
새우깡 | 1300 | 6 |
감자깡 | 1500 | 7 |
고구마깡 | 1500 | 8 |
옥수수깡 | 1600 | 9 |
먹태깡 | 1700 | 10 |
OFFSET 5를 했기 때문에 6번째 행부터 5개의 행이 출력되게 된다.
사용법이 간단하고 유용하기 때문에 알아두면 굉장히 편리하고 좋다. 다만 모든 SQL에서 사용가능한 함수는 아니니 반드시 알아보고 사용해야 한다. 다른 SQL을 사용하게 된다면 거기에 맞는 함수를 찾아서 또 익혀봐야 겠다.
2. 오늘 배운 것
- MySQL에서 사용 가능한 LIMIT과 OFFSET에 대해 알아보았다.
- 매일 새로운 걸 알아가는 과정이 재밌는 것 같다. 열심히 더 공부해보아야겠다.
'오늘 배운 것' 카테고리의 다른 글
24-04-08 Kotlin joinToString()과 StringBuilder (0) | 2024.04.08 |
---|---|
24-04-07 MySQL GROUP_CONCAT (0) | 2024.04.07 |
24-04-05 SQL Rank, Dense_Rank, Row_Number (0) | 2024.04.05 |
24-04-04 정규 표현식 문제 풀이에 활용해보기 (0) | 2024.04.04 |
24-04-03 Kotlin에서 정규 표현식 사용하기 (3) (0) | 2024.04.03 |