목차
1. 개요
Oracle과 MySQL에서 페이징 처리 또는 데이터를 제한하여 조회할 때 사용하는 방법이 다름.
DBMS사용하는 키워드설명
Oracle | ROWNUM 또는 ROW_NUMBER() | 데이터에 순차적인 행 번호를 부여하여 제한 |
MySQL | LIMIT | 특정 개수만큼 데이터 출력 (시작 위치 지정 가능) |
2. Oracle에서 ROWNUM 사용
기본 사용법
SELECT * FROM employees WHERE ROWNUM <= 10;
- 설명: ROWNUM을 사용하여 상위 10개 행만 가져오기.
OWNUM과 ORDER BY 주의점
SELECT *
FROM employees
WHERE ROWNUM <= 10
ORDER BY salary DESC;
- 오류 발생 가능: ROWNUM은 ORDER BY보다 먼저 적용됨.
- 즉, 먼저 10개의 데이터를 선택한 후 정렬되므로 원하는 결과가 아닐 수 있음.
올바른 사용법
SELECT *
FROM (
SELECT e.*, ROWNUM AS rnum
FROM (
SELECT * FROM employees ORDER BY salary DESC
) e
)
WHERE rnum <= 10;
- 방법:
1️⃣ ORDER BY로 먼저 정렬
2️⃣ ROWNUM을 부여
3️⃣ WHERE rnum <= 10을 적용
ROW_NUMBER()를 활용한 페이징
ROW_NUMBER()는 SQL의 내장 함수로, 결과 집합의 각 행에 고유한 숫자를 할당하는 역할을 한다.
SELECT *
FROM (
SELECT e.*, ROW_NUMBER() OVER (ORDER BY salary DESC) AS rnum
FROM employees e
)
WHERE rnum BETWEEN 11 AND 20;
- ROW_NUMBER() OVER (ORDER BY salary DESC) → 각 행에 순번을 부여
- WHERE rnum BETWEEN 11 AND 20 → 11~20번째 행을 가져옴 (페이징 처리)
3. MySQL에서 LIMIT 사용
기본 사용법
SELECT * FROM employees LIMIT 10;
- 설명: 처음 10개의 행만 조회.
LIMIT + OFFSET을 이용한 페이징
SELECT * FROM employees ORDER BY salary DESC LIMIT 10 OFFSET 10;
- LIMIT 10 OFFSET 10 → 11~20번째 데이터 조회
- 간단한 페이징 처리 가능
4. Oracle vs MySQL 비교
기능Oracle (ROWNUM, ROW_NUMBER)MySQL (LIMIT)
기본 데이터 제한 | WHERE ROWNUM <= N | LIMIT N |
페이징 처리 | ROW_NUMBER() OVER() 사용 | LIMIT N OFFSET M 사용 |
정렬 후 제한 | ORDER BY 서브쿼리 필요 | ORDER BY 후 LIMIT 적용 가능 |
사용 편의성 | 복잡함 (서브쿼리 필요) | 간단함 (바로 사용 가능) |
📌 결론
✅ MySQL은 LIMIT이 훨씬 간단하며 페이징 처리에 최적화됨.
✅ Oracle은 ROWNUM 대신 ROW_NUMBER()를 사용하는 것이 좋음.
✅ Oracle에서 정렬 후 제한하려면 서브쿼리를 활용해야 함.
연관된 글 :
참고:
gpt
'개발' 카테고리의 다른 글
[보안] 단방향 암호화와 양방향 암호화 비교 (0) | 2025.02.28 |
---|
1. 개요
Oracle과 MySQL에서 페이징 처리 또는 데이터를 제한하여 조회할 때 사용하는 방법이 다름.
DBMS사용하는 키워드설명
Oracle | ROWNUM 또는 ROW_NUMBER() | 데이터에 순차적인 행 번호를 부여하여 제한 |
MySQL | LIMIT | 특정 개수만큼 데이터 출력 (시작 위치 지정 가능) |
2. Oracle에서 ROWNUM 사용
기본 사용법
SELECT * FROM employees WHERE ROWNUM <= 10;
- 설명: ROWNUM을 사용하여 상위 10개 행만 가져오기.
OWNUM과 ORDER BY 주의점
SELECT *
FROM employees
WHERE ROWNUM <= 10
ORDER BY salary DESC;
- 오류 발생 가능: ROWNUM은 ORDER BY보다 먼저 적용됨.
- 즉, 먼저 10개의 데이터를 선택한 후 정렬되므로 원하는 결과가 아닐 수 있음.
올바른 사용법
SELECT *
FROM (
SELECT e.*, ROWNUM AS rnum
FROM (
SELECT * FROM employees ORDER BY salary DESC
) e
)
WHERE rnum <= 10;
- 방법:
1️⃣ ORDER BY로 먼저 정렬
2️⃣ ROWNUM을 부여
3️⃣ WHERE rnum <= 10을 적용
ROW_NUMBER()를 활용한 페이징
ROW_NUMBER()는 SQL의 내장 함수로, 결과 집합의 각 행에 고유한 숫자를 할당하는 역할을 한다.
SELECT *
FROM (
SELECT e.*, ROW_NUMBER() OVER (ORDER BY salary DESC) AS rnum
FROM employees e
)
WHERE rnum BETWEEN 11 AND 20;
- ROW_NUMBER() OVER (ORDER BY salary DESC) → 각 행에 순번을 부여
- WHERE rnum BETWEEN 11 AND 20 → 11~20번째 행을 가져옴 (페이징 처리)
3. MySQL에서 LIMIT 사용
기본 사용법
SELECT * FROM employees LIMIT 10;
- 설명: 처음 10개의 행만 조회.
LIMIT + OFFSET을 이용한 페이징
SELECT * FROM employees ORDER BY salary DESC LIMIT 10 OFFSET 10;
- LIMIT 10 OFFSET 10 → 11~20번째 데이터 조회
- 간단한 페이징 처리 가능
4. Oracle vs MySQL 비교
기능Oracle (ROWNUM, ROW_NUMBER)MySQL (LIMIT)
기본 데이터 제한 | WHERE ROWNUM <= N | LIMIT N |
페이징 처리 | ROW_NUMBER() OVER() 사용 | LIMIT N OFFSET M 사용 |
정렬 후 제한 | ORDER BY 서브쿼리 필요 | ORDER BY 후 LIMIT 적용 가능 |
사용 편의성 | 복잡함 (서브쿼리 필요) | 간단함 (바로 사용 가능) |
📌 결론
✅ MySQL은 LIMIT이 훨씬 간단하며 페이징 처리에 최적화됨.
✅ Oracle은 ROWNUM 대신 ROW_NUMBER()를 사용하는 것이 좋음.
✅ Oracle에서 정렬 후 제한하려면 서브쿼리를 활용해야 함.
연관된 글 :
참고:
gpt
'개발' 카테고리의 다른 글
[보안] 단방향 암호화와 양방향 암호화 비교 (0) | 2025.02.28 |
---|