Top N query
-데이터를 원하느 개수만큼 끊어서 조회하는 구문 작성 방식
사례 : Top3 , top 100 ,페이지네이션(pagenation)
-rownum 이 필요 :결과집합의 데이터에 순서대로 부여되는 행번호(무조건 1부터 시작)
--product 테이블에 rownum을 추가하여 조회
--문제점 : 항목이 먼저 해석되기 떄문에 rownum 이 부여된 상태로 정렬이 되어 의미가 없어진다.
select rownum ,product.* from product;
select rownum ,product.* from product order by price asc;
--1차 해결 : 서브쿼리를 이용하여 선 정렬 수행후 rownum부여
select rownum ,TMP.* from(
select * from product order by price asc)TMP
;
TMP는 별칭이다
--top 3
select rownum ,TMP.* from(
select * from product order by price asc)TMP
where rownum<=3;
--Q : 가격이 비싼제품 TOP5
select rownum ,TMP.* from(
select * from product order by price desc)TMP
where rownum<=5;
--Q : 가장 최근에 만든 TOP3
select rownum ,TMP.* from(
select * from product order by made desc)TMP
where rownum between 1 and 3;
--가장 최근에 가입한 3명
select rownum ,TMP.* from(
select * from member order by member_join desc)TMP
where rownum between 1 and 3;
--Q : 가격이 비싼제품 3등부터 5등까지 조회
select rownum ,TMP.* from(
select * from product order by price desc)TMP
where rownum between 3 and 5;
--문제점: rownum은 부여하면서 조회하는 경우 1부터 시작하는 경우만 조회할수 있다.
--2차해결 : rownum을 다 부여해놓고 나중에 조건으로 처리
--rownum은 select를 할때 생성되는 값이므로 원하는 값을 "별칭"으로 특정해줄 필요가 잇다.
select* from (
select rownum rn ,TMP.* from(
select * from product order by price desc)
TMP)
where rn between 3 and 5;

이부분 빼고는 거의 공식처럼 사용된다고 봐도된다
'[DBMS] > - Oracle' 카테고리의 다른 글
[Oracle]기본키 Primary key (0) | 2022.05.30 |
---|---|
[Oracle]그룹쿼리 Gruop by (0) | 2022.05.30 |
[Oracle]정렬 (Sort) asc/desc (0) | 2022.05.30 |
[Oracle]서브쿼리(subQuery) (0) | 2022.05.30 |
[Oracle]듀얼테이블(dualTable)이란 ? (0) | 2022.05.30 |
댓글