rownum
: 특정개수의 행만 조회
: 행번호 매기기
- emp 테이블의 모든 컬럼 나타내기
select rownum, emp.* from emp;
- order by 추가
select rownum, emp.* from emp order by job;
select 후에 order by가 이루어지기 때문에 순서가 안맞다는 걸 확인할 수 있음
행번호 순서를 유지하기 위해서는 서브쿼리 사용해서 해결
select rownum, X.*
from (select A.* from emp A order by A.name) X;
- cart table에서 주문수량이 큰 것부터 순서를 매겨 주문번호, 주문수량을 조회
select rownum, x.cart_no, x.cart_qty
from (select * from cart order by cart_qty desc) x;
where절이 실행될 때 조건이 맞으면 1을 부여하고, 맞지 않으면 번호를 부여하지 않고 버리는 방식
조건이 rownum=1일 경우
where조건 후 첫번째 행에서 rownum=1을 만족해서 한 개를 가져오나
rownum=2일 경우
where 조건 결과의 첫번째 행의 순번이 2가 아니고 1이라 결과 버림
내가 원하는 행 개수만큼 뽑고 순번을 매길 수 있으나 중간 순번의 행은 꼭 선택하여 조회할 수 없음
rownum은 반드시 1부터 나와야하기 때문에 where 조건에서 <=10과 같은 조건은 사용 가능하지만,
between 6 and 10이나 =5, >=3과 같이 1 외의 숫자부터 나오는 것은 불가능.
따라서 특정 행을 추출할 때 rownum이 포함된 select문 바깥에 한 번 더 select를 감싸줌
select rownum, emp.*
from emp
where rownum between 6 and 10;
이렇게 하면 안나오지만
select *
from(select rownum rn, emp.* from emp)
where rn between 6 and 10;
이렇게 select문으로 한 번 더 감싸면 결과가 나옴
select *
from (select rownum, emp.* from emp)
where rownum between 6 and 10;
하지만 rownum에 aliasing을 하지 않으면 결과가 나오지 않음
'오라클' 카테고리의 다른 글
데이터 자동 생성 (0) | 2024.07.19 |
---|---|
테이블 join (0) | 2024.07.15 |
오라클 REGEXP 함수 (0) | 2024.07.12 |
오라클 조건문 (0) | 2024.07.12 |
오라클 NULL, NVL, NULLIF, COALESCE (0) | 2024.07.12 |