김갱환
맨땅에 코딩
김갱환
전체 방문자
오늘
어제
  • 분류 전체보기 (239)
    • ⁂ 맨땅에 코딩 (11)
      • : Story (3)
      • : MiniProject 'MyWeb' (1)
      • : Final Project (5)
      • : Josa-Moa 한국어 조사 처리 프로젝트 (1)
    • —————Frontend——————————————.. (0)
    • ⁂ HTML (10)
      • : 기본 익히기 (10)
    • ⁂ CSS (15)
      • : 기본 익히기 (15)
    • ⁂ Java Script (32)
      • : 기본 익히기 (28)
      • : 자바스크립트 라이브러리 (1)
      • : 연습 문제 (3)
    • ⁂ jQuery (11)
      • : 기본 익히기 (11)
    • ⁂ Bootstrap (3)
      • : 기본 익히기 (3)
    • ⁂ TailWind CSS (1)
    • ⁂ AJAX (5)
      • : 기본 익히기 (5)
    • ⁂ Vue.js (3)
      • : 기본 익히기 (3)
    • —————DB : Data Base————————.. (0)
    • ⁂ Oracle DB (27)
      • : 기본 익히기 (24)
      • : 연습 문제 (3)
    • ⁂ MyBatis Framework (15)
      • : 기본 익히기 (15)
    • —————Backend———————————————.. (0)
    • ⁂ Java (62)
      • : 기본 익히기 (42)
      • : JDBC - Java DataBase Conn.. (4)
      • : Crawling (2)
      • : 독학으로 공부하기(과거) (11)
      • : 연습문제 (3)
    • ——————Web————————————————— (0)
    • ⁂ JSP (28)
      • : 기본 익히기 (28)
    • ⁂ Spring FrameWork (15)
      • : Legacy Project (1)
      • : 기본 익히기(Boot 기반) (14)
    • ——————————————————————— (0)
    • ⁂ Error Note (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 비트연산자 #코딩공부 #자바공부 #코딩 #자바 #프로그래밍 #개발자
  • 자바
  • http에러메세지
  • 코딩 #코딩공부 #프론트앤드 #백앤드 #풀스택개발자
  • ErrorPage
  • HTML공부
  • 코딩 #코딩공부 #상수 #리터럴 #형변환 #개발자 #자바 #자바공부 #자바독학
  • 코딩공부
  • 연산자 #기본연산자 #코딩 #자바 #독학 #자바공부 #자바연산자
  • 객체지향프로그래밍
  • 풀스택
  • 코딩공부 #코딩 #자바 #자바독학 #자바공부 #개발자 #프론트앤드 #백앤드 #풀스택
  • httperror
  • web.xml수정
  • 프론트앤드
  • 자바공부
  • 코딩
  • 백앤드
  • 개발자
  • 코딩공부 #자바공부

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
김갱환

맨땅에 코딩

⁂ Oracle DB/: 기본 익히기

[Oracle] #5-3 rownum으로 페이징하기

2022. 8. 29. 10:41

1. 모조칼럼 rownum

 

 rownum은 #4-3에서 간단한 개념을 알아보았었다.

 https://ddcloud.tistory.com/84

 

[Oracle] #4-3 Oracle 함수 : nvl, 모조칼럼(rownum, rowid)

1. nvl() 함수  이 함수는 마리아DB에서 ifnull() 함수와 같다.  nvl()을 사용하면 null값을 지정해줄 수 있다.  형식) nvl(칼럼명, 값) nvl(kor, 0) -- kor 값이 null이면 0의 값을 대입한다 문제) 주소가 'In..

ddcloud.tistory.com

 

 이번에는 이 rownum으로 페이징(Paging)을 하는 방법에 대해서 알아보려한다.

 

 

2. Paging

 

 페이징이란 한 페이지에 들어올 데이터의 수를 조건으로 나누어서 가져오는 것을 말한다.

 

 댓글을 한 번 생각해보자.

 한 기사에 댓글이 2,354개가 달렸다고 쳐본다면.

 이 기사에 들어오는 모든 사용자들에게 한번에 2,354개의 댓글 데이터를 준다면 서버의 부하가 너무 심해진다.

 그렇기에 페이지에 할당하기로 계획한, 출력할 만큼의 데이터를 나눠서 처리하게 하는 것을 페이징이라 하고 이 페이징을 효율적이게 처리하기 위해선 인덱스(목차)가 필요하다.

 

 이것을 위해 rownum을 사용하는 것이다.

 우선 데이터에 rownum을 붙여보자.

 

-- 줄번호
select hakno, uname, rownum from tb_student;

-- 줄번호에 별칭 부여하기
select hakno, uname, rownum as rnum from tb_student;

-- 줄번호가 먼저 부여되고 정렬된다
select hakno, uname, rownum as rnum from tb_student order by uname;

-- 줄번호 1~3 사이 조회
select hakno, uname, rownum from tb_student where rownum>=1 and rownum<=3;

-- 줄번호 4~6 사이 조회
select hakno, uname, rownum from tb_student where rownum>=4 and rownum<=6; -- 안됌

 

 #4-3에서 언급했듯 rownum은 무언가로 정렬을 하면 이미 붙여진 상태로 함께 정렬이 된다.

 그리고 페이징을 위해 where절로 줄번호 1~3을 조회하는 것은 가능하지만 4~6을 조회하는 것은 불가능하다.

 

where로 1~3은 잘 출력되지만
where로 4~6은 안된다

 

 왜일까?

 이것은 이유가 있다.

 where 조건절로 rownum을 4~6사이로 지정해주더라도 rownum은 where절을 만족하는 레코드에 순번을 붙이게 된다.

 그래서 1~3, 즉 첫 숫번을 1로 지정한 조건은 rownum의 성질을 만족을 하기에 출력을 하지만 4~6 사이로 지정하게 되면 3줄이 출력이 되기에 1~3으로 rownum이 붙고, 그래서 4~6의 rownum값은 존재하지 않기에 오류는 나지 않지만 출력도 되지 않는 것이다.

 

그러기 위해 rownum으로 페이징을 하기 위해 조건절에 사용하기 위해선 rownum은 모조칼럼이므로 조건절에 직접 사용하지 말고, 실제 칼럼으로 인식한 후 사용해야 한다.

 이제 rownum 칼럼은 셀프조인 후에 줄번호를 추가하고 조건절에 활용해보자.

 

문) 줄번호(rownum을 이용해서 줄번호 4~6 조회
--1) 이름 순으로 조회 (줄번호까지 같이 정렬)
select uname, hakno, address, rownum
from tb_student
order by uname;

--2) 1)의 결과를 AA 테이블로 만들어서 줄번호 붙이기
select uname, hakno, address, rownum as rnum
from (
    select uname, hakno, address
    from tb_student
    order by uname
    ) AA;
    
--3) 2)의 결과를 BB테이블로 만들고, 줄번호 4~6행을 조회하시오
select uname, hakno, address, rnum
from (
    select uname, hakno, address, rownum as rnum
    from (
        select uname, hakno, address
        from tb_student
        order by uname
        ) AA
    ) BB
where rnum>=4 and rnum<=6;

이름순으로 정렬도 하고, 4~6까지만 출력하는 것도 잘 된다!

 

 

 이런 방식으로 페이징이 가능하다.

저작자표시 비영리 동일조건 (새창열림)

'⁂ Oracle DB > : 기본 익히기' 카테고리의 다른 글

[Oracle] #6-2 계정 생성하기(dbf 파일 만들기, grant)  (0) 2022.08.30
[Oracle] #6-1 SQL Developer로 CSV파일 가져오기  (0) 2022.08.29
[Oracle] #5-2 조인(Join)  (0) 2022.08.26
[Oracle] #5-1 모델링(테이블 시나리오, 테이블 정의서) 개념 정리  (0) 2022.08.25
[Oracle] #4-4 오라클과 마리아DB의 자료형  (0) 2022.08.23
    '⁂ Oracle DB/: 기본 익히기' 카테고리의 다른 글
    • [Oracle] #6-2 계정 생성하기(dbf 파일 만들기, grant)
    • [Oracle] #6-1 SQL Developer로 CSV파일 가져오기
    • [Oracle] #5-2 조인(Join)
    • [Oracle] #5-1 모델링(테이블 시나리오, 테이블 정의서) 개념 정리
    김갱환
    김갱환
    코딩의 코자도 모르는 이의 공부 기록장

    티스토리툴바