본문 바로가기
데이터베이스/Oracle

rownum() 은 1번을 건너뛰고 출력할 수 없음

by 비븽 2022. 12. 2.

연봉(Total_sal)이 가장 높은 1등, 2등, 3등을 출력하는 코드다.

select name as Full_name,
	substr(name,1,(instr(name,' ')-1)) as Fmaily_name,
	substr(name,(instr(name,' ')),20) as Given_name,
	HIRE_DATE,
	to_char(SALARY*12, '$999,999,999') as Total_sal
from employees
order by Total_sal desc
where rownum < 4
;

 

만약 내가 4등을 출력하고싶어~ 혹은 4등 이상부터 보고싶어~ 라고 할 때,

where rownum = 4 (혹은 >= 4)

이러면 no rows selected 뜨는 이유는?

 


 

rownum()

   요건 데이터를 불러올 때 '하나씩 번호를 붙여서' + '1번부터 순차적으로' 출력한다. 그런데 여기서 붙이는 번호는 rownum이 임의로 붙이는거지 데이터베이스에 있는게 아니라서,

갑자기 4등 출력! 이러면 엥? 데이터베이스에 1 2 3번 없는데? 하고 no rows selected가 난다

desc 테이블A

로 출력해보면 칼럼에 rownum이 없는데

select rownum, 칼럼1, 칼럼2 from 테이블A

로 출력하면 1 2 3 4 ... 가 출력이 된다...ㅎㅎ;

 

 


 

 

그럼 4등만 출력을 어떻게 할까? 서브쿼리를 이용한다.

4등만 출력해보자!

성공!

select *
from (select rownum as r2
           , name as Full_name
           , substr(name,1,(instr(name,' ')-1)) as Fmaily_name
           , substr(name,(instr(name,' ')),20) as Given_name
           , HIRE_DATE
           , to_char(SALARY*12, '$999,999,999') as Total_sal
	  from (select rownum as r1
      			 , name
                 , substr(name,1,(instr(name,' ')-1))
                 , substr(name,(instr(name,' ')),20)
                 , HIRE_DATE
                 , SALARY
            from employees
        	order by SALARY desc)
            )
where r2 = 4
;