오늘은 최근 정리하지 못한 오라클 db에 대해서 정리해 보려고 한다.
오라클 db에서 가장 이해가 어려웠던 것이 join과 group by이다.
예시로 product라는 테이블과 sales라는 테이블에서 상품이름 별 매출금액합계를 도출하려고 한다.
그때 쿼리문을 짠다면
select
P.product_name as 상품이름,
sum(S.sales_total) as 매출합계
from sales S
join product P
on S.product_idx = P.product_idx
group by P.product_name;
위와 같이 쓸수 있을 것이다.
여기서 이해가 어려웠던 점은 P.product_name에서 P가 뭘 의미하는가 수업을 들으면서
머리가 하얗게 되어버린 것이다.
그럼 어찌어찌 이해한 내용으로 설명하자면
product테이블의 명칭을 임시로 P라고 정의하고 sales테이블을 S로 명명한다. 그러니
product테이블에서 product_name과 sales테이블에서 sales_total의 합계를 표시한다.
그다음 sales의 product_idx와 product의 prodcut_idx를 비교해서 겹치는 idx만 묶어서
group by로 또 겹치는 이름을 묶는다.
결과적으로
라는 결과가 나오게 된다.
만약 이 설명을 듣고 이해가 가지 않는다면 그림을 직접 그려본다면 이해하기 쉬울 것이다.
다음문제는
select
P.product_name as 상품이름,
sum(S.sales_total) as 매출합계
from sales S
left outer join product P
on S.product_idx = P.product_idx
group by P.product_name;
위 내용과 동일하지만 product_idx에서 겹치지 않는 sales_idx 1006번의 값도 같이 가져오는 쿼리문이다.
다음은 위와 같은 결과를 만드는 쿼리문이다.
이 쿼리문에서 중요한 점이 있다.
select * from sales S
left join product P
on S.product_idx = P.product_idx;
이렇게 sales의 모든 테이블을 불러와버리면
product_idx_1이라는 동일한 idx가 생겨버린다.
이건 당연한 결과일 것이다. sales의 모든 테이블을 불러와서 join을 해버리면 product테이블의 product_idx와 sales테이블의 product_idx가 겹칠 것이고 추가로 하나의 열(칼럼)이 더 생길 것이다.
그렇기에 표시할 칼럼을 따로 써줘야 할 필요가 있다.
select S.*,P.product_name, P.product_price from sales S
left outer join product P
on S.product_idx = P.product_idx
order by s.sales_idx;
이렇게 sales테이블의 모든 칼럼과 product_name, price를 가져온다고 지정을 해준다면 사진처럼 불러올 수 있을 것이다.
마지막으로 사진처럼 만들고 싶다면
select S.product_idx as 상품번호,P.product_name as 상품이름, max(S.sales_total)as 판매최대금액 from product P
join sales S
on P.product_idx = S.product_idx
group by S.product_idx, P.product_name
order by 판매최대금액 desc;
이렇게 해야 할 것이다.
일단 select의 시작은 똑같이 불러올 열을 지정해 준다.
그리고 sales를 join 시켜주고(묶어주고) 양 테이블의 product_idx를 비교해서 겹치는 값을 묶어준다.
다음은 sales의 product_idx에서 겹치는 값을 묶어주고 product의 prodcut_name에서 겹치는 값을 묶어준다.
그다음 order by로 내림차순(exsc)으로 배열한다.
요즘 드디어 학원에서 html이 시작되었다.
이미 html을 시작한 지는 3일이나 지났지만 제대로 블로그에 정리를 못하고 있다.
db를 시작한지 얼마 된 것 같지도 않은데 벌써 db가 끝나고 다음 주부터는 jsp도 시작될 것이다.
학원인원으로 만든 스터디 멤버와도 html을 주제로 첫 벌째 과제로 시작하여 다음 과제에서는 미니프로젝트까지 만들어 볼 계획이다.
jsp로 어느 정도 만들 정도의 정보가 쌓이면 더욱 고퀄리티의 웹페이지도 도전해 볼 생각이다.
학원에서 같이 공부하는 다수의 잘하는 인원들을 보면 열등감이 들 수도 있지만 열등감을 동력으로
움직일 수 있는 인간이 되기 위해서라도 이 그 잘하는 대상이 쫓아가야 할 목표로 생각하고 매일 열심히 하다 보면
그 사람들의 뒤를 따라갈 수는 있지 않을까?
힘들어도 이겨내서 기분 좋은 끝을 맞이할 수 있도록 계속해봐야 할 것이다.
그럼 그런 미래를 생각하며 오늘은 여기서 마치겠다.
'오라클 DB' 카테고리의 다른 글
오라클 DB 기초 - DDM, 제약조건 (0) | 2023.04.17 |
---|