간펴니
간편 자바프로그래밍
간펴니
전체 방문자
오늘
어제
  • 전체보기 (185)
    • 알고리즘 (2)
    • JAVA (69)
      • 이펙티브 자바 (47)
      • JAVA 병렬프로그래밍 (5)
      • 자바 (17)
    • SPRING (60)
      • Spring (12)
      • IceWater Community (37)
      • Homme Shop (10)
      • 토비의 스프링 (1)
    • SPRING BOOT (4)
      • WhiteRecord (7)
    • 오류 (9)
    • DB (10)
      • ORACLE (5)
      • MYSQL (1)
      • MYBATIS (4)
      • JPA (0)
      • 대용량 데이터 베이스 (0)
      • SQL (0)
    • FRONT (8)
      • JSP (2)
      • JavaScript (2)
      • Jquery (3)
      • Thymeleaf (1)
    • AWS (6)
    • JNI (10)
    • 회고 (0)
    • MQ (0)
    • Radis (0)
    • Git (0)
    • Docker (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 블로그 컨셉 변경

인기 글

태그

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
간펴니

간편 자바프로그래밍

DB/ORACLE

페이징- 서브쿼리,ROW-NUMBER()를 이용한 쿼리작성

2021. 7. 29. 10:50
728x90

SELECT BNO,
TITLE,
CONTENT,
WRITER,
REGDATE
FROM (
SELECT BNO,
TITLE,
CONTENT,
WRITER,
REGDATE,
ROW_NUMBER() OVER(ORDER BY BNO DESC) AS
RNUM
FROM MP_BOARD
)
WHERE RNUM BETWEEN #{rowStart} AND #{rowEnd}
<!-- 1페이지 1and 10 ,2페이지 11and 20,... -->
ORDER BY BNO DESC

 

서브쿼리를 이용해서 페이징을 하는 부분의 쿼리이다.

BNO(기본키) , 제목 , 내용 , 작성자 , 작성일 을 검색해오는 쿼리

SELECT BNO,
TITLE,
CONTENT,
WRITER,
REGDATE
FROM 

에서 다음부분의

 (
SELECT BNO,
TITLE,
CONTENT,
WRITER,
REGDATE,
ROW_NUMBER() OVER(ORDER BY BNO DESC) AS
RNUM
FROM MP_BOARD
)

서브쿼리를 통해 정렬을 한다.

그냥 서브쿼리를 사용하지 않고 바로 order by bno로 정렬하면 되지않나? 하는 의문이 들었지만 생각해보니

 

1 ,2 ,3 ,4 ,5~~100까지의 bno를 가진 100개의 게시글이 있을때 ,만약 중간중간 홀수bno를 삭제했다면 게시글이 제대로 나오지 않을 것 이다. bno의 정렬을 기준으로 1페이지가 bno 1~10까지라고 했을때 원래 10개의 개시글이 나와야 하지만 2,4,6,8,10번 - 5개의 게시글 밖에 나오지 않는 것이다.

 

그래서 서브쿼리의 

ROW_NUMBER() OVER(ORDER BY BNO DESC) AS RNUM FROM MP_BOARD

을 사용했다.

 

row_number()는 over(데이터)  안의 데이터에 순차적으로 값을 준다 (1,2,3,4,5 ~) 이 값을 RNUM에 담는다.

 

과정을 설명해보면

bno의 내림차순 정렬을 한 후 거기에 1 2 3 4 숫자를 먹여준다, bno의 홀수번호를 삭제해도

bno2 = 1번 , bno4 = 2번 , bno6=3번 이런식으로 중간의 bno가 삭제되거나 수정되어도 올바른 순서를 먹여준다 

 

WHERE RNUM BETWEEN #{rowStart} AND #{rowEnd}

 

이렇게 쿼리문을 작성한 후 화면에서 1페이지를 누르면 RNUM의 1{rowStart}~10{rowEnd}이 , 2페이지를 누르면 11~20이 출력되게 하면 페이징을 구현 할 수 있다.

 

그 과정은 나중에 이어서 설명하겠다

 

 

728x90
저작자표시 (새창열림)

'DB > ORACLE' 카테고리의 다른 글

[오라클]CASCADE 제약조건 추가하기  (0) 2021.09.06
오라클 시퀸스란?  (0) 2021.08.02
오라클 계정만들기,sid 확인  (1) 2021.07.26
ORA-12514, TNS:listener does not currently know of service requested in connect descriptor 오류해결  (0) 2021.07.12
    'DB/ORACLE' 카테고리의 다른 글
    • [오라클]CASCADE 제약조건 추가하기
    • 오라클 시퀸스란?
    • 오라클 계정만들기,sid 확인
    • ORA-12514, TNS:listener does not currently know of service requested in connect descriptor 오류해결
    간펴니
    간펴니
    개발공부 기록하는 곳

    티스토리툴바