ROWNUM은 n번째 행을 구할 때 사용하는 WHERE의 조건이다.
특정 개수만큼 원하는 데이터를 추출할 수 있다.
T1에 데이터가 100개라면
SELECT * FROM TABLE T1
이렇게 쓰면 100개가 나오고
SELECT * FROM TABLE T1 WHERE ROWNUM < 10
이렇게하면 9개 나온다
SELECT * FROM TABLE T1 WHERE ROWNUM = 1
이렇게하면 첫번째의 1개의 데이터가 나오는데
SELECT * FROM TABLE T1 WHERE ROWNUM = 2
이렇게하면?
두번째의 데이터가 나오지 않고
아무것도 나오지 않는다
그 이유는 ROWNUM은 WHERE절이 실행될때 조건의 부합하면 번호를 부여해주고 그렇지 않으면 버리는 방식이기 때문이다. 순번을 미리 부여하고 가져오는것이 아닌 조건에 맞으면 가져오고 아니면 버리므로
1번이 채워지지않으면 2은 채워질수없으므로 ROWNUM = 1 은 있어도 ROWNUM =2, ROWNUM =3 .... ROWNUM =99는 없다.
하지만 가져오고 싶다면?
쿼리문 실행순서에 따르면
: FROM ▷ WHERE ▷ GROUP BY ▷ HAVING ▷ SELECT ▷ ORDER BY
순이므로 FROM에 미리 조건을 주면된다.
SELECT *
FROM (SELECT ROWNUM AS RN , T1.*
FROM TABLE T1 ) A
WHERE A.RN = 2 ;
'SQL' 카테고리의 다른 글
[SQL] NVL , NVL2 (0) | 2023.02.10 |
---|---|
SQL Oracle - 튜닝 Hint 힌트 (0) | 2023.01.06 |
SQL SELECT 조건절 / WHERE 조건절 / JOIN (0) | 2022.11.29 |