티스토리 뷰
DBMS에서 많이 쓰이는 oracle과 mysql에는 기본적으로 비슷하지만 다른 부분이 있다.
그중에서 mysql에서 사용되는 limit이 oracle에서는 rownum으로 비슷하게 쿼리를 다룰 수 있게 한다.
limit, rownum의 사용법은 반환하는 쿼리의 수를 제한해서 볼 수 있게 하는 것이다. top-n을 확인하는 쿼리에 많이 쓰이게 된다!
MySQL limit
mysql limit은 0-based 인덱스를 사용하므로 limit 5,10을 하면 6번째행부터 읽어오게 된다.
//결과테이블에서 5개행을 읽어온다
SELECT * FROM [TABLE NAME] LIMIT 5;
//결과테이블에서 6번째부터 10개행을 읽어온다
SELECT * FROM [TABLE NAME] LIMIT 5, 10;
Oracle rownum
oracle rownum은 1-based 인덱스를 사용한다. rownum은 oracle에서 내부적으로 각행에 대해 1씩 증가하면서 부여된다.
//테이블에서 rownum1~5까지 총 5행을 읽어온다
SELECT * FROM [TABLE_NAME] WHERE ROWNUM <=5;
※여기서 주의할 점
rownum의 경우 결과 테이블이 생성된 후에 부여되는 것이므로 위의 코드처럼 처 음행부터 읽어오는 즉 1번부터 읽어오는 것은 가능하지만 WHERE ROWNUM BETWEEN 6 AND 10 이런 식으로는 읽어올 수 없다. 또한 ORDER BY [칼럼명]으로 했을 경우 rownum이 이미 부여된 상태로에서 뽑아오므로 원하는 결과를 읽어올 수 없다.
중간 순서의 행부터 읽어오고 싶고 ORDER BY가 적용된 결과를 얻으려면 아래 코드처럼 작성해야 한다.
//inline view를 통해 같은레벨이 아닌
//한단계 전 레벨의 결과의 정렬된 테이블에서 rownum을 이용함
SELECT *
FROM(SELECT 컬럼명1,컬럼명2
FROM [테이블명]
ORDER BY 2) T
WHERE ROWNUM <=10;
//한단계 전 레벨에서 생성된 rownum을 이용해 중간순서부터 읽어옴 6~10번째 행
SELECT T.*
FROM(SELECT rownum "count",컬럼명1,컬럼명2
FROM [테이블명]
ORDER BY 2) T
WHERE count BETWEEN 6 AND 10 ;
//order by, 중간 순서부터 읽기 6~10번째 행
SELECT ROWNUM "3rd", T.*
FROM(
SELECT ROWNUM "2nd",T.*
FROM (
SELECT ROWNUM "1st",컬럼명1 , 컬럼명2
FROM [테이블명]
ORDEY BY 컬럼명2 DESC
)T
)T
WHERE "2nd" BETWEEN 6 AND 10;
'CS공부 > 데이터베이스' 카테고리의 다른 글
[MySQL] count() 함수사용-null제거, 중복제거 (0) | 2021.06.08 |
---|---|
[데이터베이스 DB] SQL종류 : DML,DDL,DCL 이란? (0) | 2021.05.26 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- websocket
- git
- 정렬
- Heap
- sockjs
- BFS
- JavaScript
- 삼성 sw역량 테스트
- 삼성 sw역량테스트
- DP
- java
- 자바
- programers
- 알고리즘
- dfs
- Baekjoon
- OS
- MST
- 최소 스패닝 트리
- Stomp
- 운영체제
- 코딩테스트
- 채팅
- Oracle
- Spring
- 완전탐색
- 분리 집합
- 프로그래머스
- SWEA
- 백준
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함