
지난 글에 OUTTER JOIN이 무엇인지만 말하고 마무리했다.
그래서 이번엔 예시를 보여주고 ROWNUM에 대해 알아보자.


1.LEFT JOIN

두 테이블을 결합해서 누가 몇 개의 글을 작성했는지를 보여주는 쿼리문이다.
bidx의 갯수로 글의 개수를 파악하여 작성했다. 현재 결과를 보면 두 개의 열로 나와있는데, 이걸 합쳐서 나타낼 수 있다.

'||'를 이용하면 연달아 하나의 열에 연달아서 나타낼 수 있다.
2.RIGHT JOIN
앞의 예시는 너무 단순해서 약간 복잡하게 해봤다.


두 번째 줄의 DISTINCT의 의미는 컬럼(열)에 대한 중복되는 값을 없애주는 기능이다.
즉, 같은 내용은 한 번만 나타내게 한다. 한 사람이 글을 여러 번 썼을 경우가 있어 DISTINCT를 사용했다. DECODE( )랑 SUBSTR( )는 다룬 적이 있어서 패스하겠다.


방금 문제와 비슷한 경우다. 연령대를 닉네임으로 바꾼 것뿐이다.
또 다른 문제도 보자.


두 번째 줄의 RIGHT JOIN부분은 LEFT JOIN 혹은 INNER JOIN으로 해도 결과는 같다.
3.ROWNUM

ROWNUM은 테이블을 조회하고 난 뒤에 각 행별로 1부터 숫자는 매기는 기능을 갖고 있다.
ROWNUM을 이용해서 게시판의 페이지 개수별로 조회를 할 수 있다.
BIDX(글 번호)로 페이지를 나타낼 수도 있지 않을까 싶지만...

게시글의 특성상 "삭제"라는 기능이 있다. 게시글을 삭제한다면 BIDX으로만 나타내기에 어려움이 있다.
그 점을 생각해서 ROWNUM이 있다는 걸 알아두자.
*옆의 사진은 ROWNUM을 사용하는 기본 방법이고, 필요한 부분만 편집해서 올렸다.
이제 페이징 처리(게시판의 페이지 개수별)를 하는 법을 보여주고 끝내겠다.
testboard테이블엔 12개의 글이 있다. 6개씩 조회하고 싶을 땐 (1~6, 7~12) 밑의 쿼리문으로 작성하자. 복잡할지라도 이유가 있다.

(← 1~6번까지의 게시물)
전체적인 맥락을 보자면 testboard테이블을 a라 짓고,
ROWNUM과 a 테이블을 합친 테이블을 b라 지은 것이다.
두 번째 줄에서 'ROWNUM AS RUM'(*별칭 기능을 사용. RUM 말고 원하는 이름으로 해도 좋다.)으로 하는 이유는 4번째 줄의 ROWNUM을 이용하기 위해서다. 만일 별칭으로 하지 않고 ROWNUM으로 하게 된다면 조회가 되지 않기 때문이다.
궁금한 사람은 실제로 해봐라.
(← 7~12번까지의 게시물)
누가 봐도 복잡하게 보이는 쿼리문인데, 이 방법으로 해야 나중에 100,000 건 or 1,000,000건이 넘는 방대한 게시글에서 속도면으로 빠르기 때문이다. 물론 조그마한 게시판 같은 경우에는 의미가 없다. ↓처럼 해도 된다는 뜻이다.

'Oracle DB' 카테고리의 다른 글
| ROW_NUMBER() OVER() (1) | 2022.01.20 |
|---|---|
| FOREIGN KEY, INNER JOIN, OUTER JOIN (0) | 2022.01.11 |
| UNION (4) | 2022.01.08 |
| DECODE, NVL, CASE (2) | 2022.01.07 |
| 서브쿼리, 시퀀스 (4) | 2022.01.06 |