오라클

rownum

chantleman 2024. 7. 12. 17:34

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