도토리 줍는 개발자 감자
SQL Oracle ROWNUM=2 사용하는 방법 - jimoo 본문
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
여기 참고했음 ㅎ
'SQL공부' 카테고리의 다른 글
LeetCode Oracle 176. Second Highest Salary(MAX) - jimoo (0) | 2021.10.08 |
---|---|
프로그래머스 GROUP BY입양 시각 구하기(1) Oracle - jimoo (0) | 2021.10.05 |
MAX, MIN, COUNT Oracle - jimoo (0) | 2021.10.01 |
프로그래머스 SELECT(WHERE) 아픈 동물 찾기 Oracle - jimoo (0) | 2021.09.30 |
프로그래머스 SELECT (ORDER BY) 모든 레코드 조회하기 Oracle - jimoo (0) | 2021.09.30 |