[Oracle] ROWNUM 주의 사항(페이징 or 정리시)

2017. 8. 22. 13:15
반응형

[Oracle] ROWNUM 주의 사항(페이징 or 정리시)




▼ WHERE or ORDER BY 절 이없을때

 
1. 주로 착각 하고 잘못 사용 경우

1
2
3
 
     SELECT ROWNUM, COL1, COL2  FROM TABLE_NAME ORDER BY COL1 ASC;
 
cs

 -> RUM과 COL1 이 동일 하게 나옴. 문단의 정리 가 필요하다.



2. 잘 사용했을 경우

1
 
SELECT ROWNUM RNUM, COL1, COL2  FROM (SELECT ROWNUM, COL1, COL2  FROM TABLE_NAME ORDER BY COL1 ASC) TABLE_1;

cs

   -> RNUM과 NUM의 값이 다르게 나오며 다른방식으로 사용 할수있다.




▼ WHERE or ORDER BY 절이 있을때


1. 주로 착각 하고 잘못 사용 경우

1
2
 
     SELECT ROWNUM, TABLE_1.* FROM (SELECT * FROM TALBE_NAME ORDER BY COL1 ASC) TABLE_1 WHERE ROWNUM >= 0 AND ROWNUM <= 10;

cs

  -> 쿼리는 틀리지 않은것 처럼 보이며 오류 또한 나오지 않지만 아무런 결과가 나오지 않는 경우를 볼수있다.

주로 이경우는 오류가아닌 쿼리가 잘못 된 경우 이므로 쿼리를 다시짜보도록하자.


2. 잘 사용했을 경우

1
2
3
   
    SELECT *  FROM (SELECT ROWNUM RNUM, TABLE_1.*  FROM 
(SELECT * FROM TABLE_NAME ORDER BY COL1 DESC) TABLE_1) 
WHERE RNUM >= 0 AND RNUM <=10;
 
cs
---> 우리가 원하는 해당 값을 얻을수 있다. 필자는 해당 쿼리를 이용하여 페이징 기능을 주로 만드는 데 사용 했으며 필자역시 위의 착각하고

사용하는 경우를 자주 실수하는 편이다. 그래서 필자와 같은 분들을 위해 이글을 작성하였다.



** 보너스


1
2
3
   
    SELECT *  FROM (SELECT ROWNUM RNUM, TABLE_1.*  FROM 
(SELECT * FROM TABLE_NAME ORDER BY COL1 DESC) TABLE_1) 
WHERE RNUM BETWEEN 0 AND 10;
 
cs
--> 2번의 경우처럼 사용해도 이상은없으나 필자의 경우 BETWEEN 을 주로 사용하는편이다. 
BETWEEN 사용시 좀더 빠르고 가볍게 검색이된다는 장점이 있다는데..
솔직히 아직 까지 몸에 다가온적은 없지만 습관처럼 쓰고있다.

   




P.S ** ROWNUM을 사용 하는 절에는 WHERE절과 ORDER BY절을 넣지 않도록하자!



반응형

'Program > DataBase' 카테고리의 다른 글

[Oracle] SUBSTR 문자열 자르기 함수  (0) 2018.01.17
[Oracle] INSTR 특정 문자 확인 함수  (0) 2018.01.17
DDL, DML, DCL + TCL 이란?  (0) 2017.08.21
[MYSQL] 한글깨짐  (0) 2017.07.20
[Oracle] CMD/ SQL PULS/ Oracle 접속  (0) 2017.07.19

BELATED ARTICLES

more