반응형
업무 중에 가끔씩 가장 최신 데이터 1개만 출력하는 등의 쿼리를 짠다.
그와 관련해서 ROWNUM과 LIMIT에 대해 정리해보려한다.
Oracle에서 행 수 제한하기
ROWNUM으로 특정 개수 데이터 조회하기
SELECT * FROM CUSTOMERS
WHERE ROWNUM=2;
WHERE 절에서 ROWNUM을 사용하여 데이터 개수를 제한할 수 있다.
단, '=' 연산이기 때문에 조회한 데이터가 1개밖에 없을 때는 결과가 출력되지 않는다. 만약에 보고싶다면 '<=' 로 변경해주면 된다.
정렬하여 특정 개수(2개) 데이터 조회하기
-- 잘못된 예
SELECT * FROM Customers
WHERE ROWNUM<=2
ORDER BY AGE DESC;
-- 올바른 예
SELECT *
FROM ( SELECT * FROM CUSTOMERS
ORDER BY AGE DESC )
WHERE ROWNUM<=2;
- 출력 결과

위의 예가 다른 출력값을 갖는 이유는 ORDEY BY 보다 WHERE절이 더 먼저 실행되기 때문이다.
( 실행 순서 : FROM - WHERE GROUP BY - HAVING - SELECT - ORDER BY )
그래서 FROM 절에 서브쿼리 ( 인라인뷰 ) 로 정렬한 후 ROWNUM 을 사용하였다.
MySQL에서 행 수 제한하기
LIMIT으로 특정 개수 (1개) 데이터 조회하기
-- 1. 개수 제한
SELECT * FROM Customers
-- WHERE Country = 'Mexico'
-- ORDER BY CustomerID
LIMIT 1;
-- 2. 시작 위치 및 개수 제한
SELECT * FROM Customers
LIMIT 2,5;
위의 Where 절과 ORDER BY는 LIMIT의 순서를 보여주기위해 주석처리로 달아놨다.
LIMIT 함수를 통해 행의 개수를 제한할 수 있고 그 옆에 출력하고 싶은 개수를 적으면 된다. 만약에 시작 위치를 지정하고 싶으면 'LIMIT 시작 위치, 출력하고 싶은 행 개수' 로 사용할 수도 있다.
주의할 점은, 인덱스가 0부터 시작이다.
정리
가장 최신 데이터를 조회하는 등의 특정 개수 데이터를 출력하는 쿼리를 짜기위해 알아두면 좋을 것 같다.
반응형
'SQL' 카테고리의 다른 글
| [MySQL] 연/월/일 출력하기 ( 좌측 0 제거 ) (0) | 2023.10.26 |
|---|---|
| [SQL] CASE-WHEN, 조건에 따라 출력하기 (0) | 2023.06.12 |
| [Oracle/MySQL] CONCAT, 문자열 합치기 (0) | 2023.06.08 |
| [MySQL] REGEXP, 정규표현식을 이용하여 검색하기 (0) | 2023.06.06 |
| [Oracle/MySQL] 날짜 연산, 이전 달 출력하기 (0) | 2023.05.31 |