도토리 줍는 개발자 김지무

SQL Oracle ROWNUM=2 사용하는 방법 - jimoo 본문

SQL공부

SQL Oracle ROWNUM=2 사용하는 방법 - jimoo

지무 2021. 10. 8. 02:30
728x90
반응형

n번째 행을 구할 때 rownum을 사용한다.

SELECT *
FROM 테이블명
WHERE ROWNUM = N

N은 구하고자 하는 행의 번호를 적으면 된다! 예를들어 테이블에서 첫 번째 행을 구할 때 WHERE ROWNUM = 1 로 작성해주면된다.

그리고 1~4번째 행을 구하고싶으면 ROWNUM <=4 를 적으면된다.

 

그러면 2번째 행을 구할 때 ROWNUM = 2를 적으면 될 것 같지만 !!!!!! 안된다!

아래 사진에서 Input 테이블의 2번째 행(Output)을 출력해보자!

예제 테이블

SELECT Salary AS "SecondHighestSalary" 
FROM Employee
WHERE ROWNUM=2

위의 코드를 실행시키면 기대하는 결과(예제테이블 사진에서 Output)인 두번째 행이 나오지않는다.

Oracle의 ROWNUM은 1부터 시작하고, WHERE절을 통과하는 행만 증가한다.

위의 오라클 쿼리를 보면 FROM 에서 테이블을 불러온 뒤 "WHERE ROWNUM = 2" 절을 실행하는 것을 볼 수 있다.

?????WHERE절을 통과했는데 ROWNUM이 왜 2로 할당이 되지 않는가??????

코드 실행 결과

그 이유에 대해 설명해주겠음!

 

WHERE 조건절에서 ROWNUM=1 을 먼저 실행하지 않아서, ROWNUM 의 1번이 할당되지 않았다!

즉, ROWNUM=1이 없기때문에 당연히 ROWNUM을 1에서 2로 증가시킬 수 없는것이다.

 

*참고: 쿼리문 실행순서

FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY

 

이제 본문이다!

** ROWNUM=2 솔루션

SELECT E.Salary AS "SecondHighestSalary"
FROM (SELECT ROWNUM AS rownumber, Salary
      FROM Employee) E
WHERE E.rownumber = 2

서브쿼리에 ROWNUM 컬럼(rownumber)을 추가한 테이블 E를 생성한 다음에!!!!

E테이블에서 rownumber 컬럼중 2 값을 가지는 행을 출력하는 조건을 WHERE절에 적어주면 된다.

 

 

https://stackoverflow.com/questions/24094491/oracle-rownum-2-not-returning-results 

여기 참고했음 ㅎ

728x90
반응형
Comments