[파이널프로젝트] 겹치는 컬럼이 없는 2테이블을 세로(합집합)으로 합치기

hanahana·2022년 11월 1일
0
post-thumbnail

오리지널 북과 일반도서 두 2개는 별개의 테이블로 만들어져있지만 두 테이블을 합쳐서 조회수 3개만 출력하고싶었다.

우선 2개의 테이블을 합치는 것을 먼저하기로 했다.

테이블 합치기

select nor_book_no "nor_book_no", cover_rename, book_info,book_title,
'normal' as "category",'Y' as "BOOK_PERMISSION",view_count from normal_book 
//여기까지는 일반도서 테이블

union all //합쳐주는 코드

select ori_book_no "nor_book_no", corver_rename "cover_rename",
book_info,book_title,'origin' as"category",BOOK_PERMISSION, 
view_count from origin_book 
//여기까지 오리지널 도서 테이블

where status like 'Y%' and BOOK_PERMISSION like 'Y%' //출력조건

order by view_count desc; //정렬조건
  • 우선 일반도서와 피넛 오리지널 도서의 책번호를 뜻하는 컬럼의 이름이 달랐다.
    • 그래서 하나의 컬럼으로 출력하기 위해 두 컬럼의 이름을 같게 하기로 했다

    • nor_book_no "nor_book_no" ori_book_no "nor_book_no"

    • 컬럼이름을 이런식으로 적어주면 같은 "nor_book_no"로 인식하게 된다.

    • 카테고리의 이름을 붙여주어 합쳐져도 오리지널과 일반도서의 구분이 가도록 해주었다.

    • 'normal' as "category" 'origin' as"category"

    • 오리지널 도서와 일반도서가 출력되는 조건이 다르다, 오리지널 도서는 관리자의 허가가 필요하며 일반도서는 삭제하지 않았으면 된다.

    • 일반도서에는 관리자 허가 칼럼이 없기에 'Y' as "BOOK_PERMISSION" 으로 무조건 허가 컬럼이 Y로 출력되도록 하였다.


    • 이렇게 컬럼명 "출력할컬럼명"을 이용하여 컬럼의 이름을 맞춰주면 2개의 테이블이 겹치는 컬럼이 없어도 서로 합쳐진다.

합친 테이블에서 원하는 순위의 컬럼만 가져오기

원하는 순위의 컬럼을 가져오는 법에 대해서는
여기에 자세하게 적었다.

이번에도 같은 방법을 썼다.

select * from( //select*from으로 from()의 괄호안에 합친 테이블을 넣어준다
select  "nor_book_no", cover_rename, 
book_info,book_title,"category","BOOK_PERMISSION",view_count,ROW_NUMBER() 
over (order by view_count desc) r
from (select nor_book_no "nor_book_no", cover_rename, 
book_info,book_title,'normal' as "category",'Y' as
"BOOK_PERMISSION",
view_count from normal_book 
union all 
select ori_book_no "nor_book_no", corver_rename "cover_rename", 
book_info,book_title,'origin' as"category",BOOK_PERMISSION,
view_count from origin_book
where status like 'Y%' and BOOK_PERMISSION like 'Y%'))//여기에는 order by를 넣지 않았다.
where r between 1 and 3; //where 조건 between을 활용한다
  • 코드가 길어 복잡해 보이지만 여전히 규칙은 간단했다
  • select * from (row_number()로 연결해 만든테이블) where 내가붙인컬럼명 between 첫순위 and 마지막 순위이다.
  • ()괄호 안에는 select 내가 출력하고자 하는 컬럼명들, ROW_NUMBER() over (정렬조건) 순위컬럼이름 from() 이다
  • from()의 괄호 안에는 내가 원하는 조건으로 만든 테이블의 쿼리문을 넣어주면 되며 여기에 들어갈경우 orderby는 row_number에서 해주기때문에 생략한다

주의점

주의할 것은 반드시 내가 정렬하고자 하는 컬럼을 select절에 써주어야 하며 내가 원하는 조건의 컬럼도 똑같이 select절에 써주어야 정상출력된다는것이다

파이널을 하며..

강의땐 중요하지 않게 생각한 쿼리문의 중요성을 많이 느끼고 있다.
배울때는 자주 쓸까? 싶었는데 의외로 쿼리문을 잘 만들어야 내가 원하는 값을 만들수 있다는 걸 알았다.

profile
hello world

0개의 댓글