고객 이름과 고객이 주문한 도서의 판매가격을 검색
select c.name, b.price, b.bookname from customer c
join orders o on c.custid = o.custid
join book b on o.bookid = b.bookid;
고객별로 주문한 모든 도서의 총 판매액을 구하고, 고객별로 정렬
select c.name, sum(b.price) from customer c
join orders o on c.custid = o.custid
join book b on o.bookid = b.bookid
group by c.custid;
고객의 이름과 고객이 주문한 도서의 이름 구하기
select c.custid, c.name, b.price, b.bookname from customer c
join orders o on c.custid = o.custid
join book b on o.bookid = b.bookid order by c.custid;
가격이 20000원인 도서를 주문한 고객의 이름과 도서 이름 구하기
select c.name, b.price, b.bookname from customer c
join orders o on c.custid = o.custid
join book b on o.bookid = b.bookid and b.price >= 20000;
도서를 구매하지 않은 고객을 포함하여 고객의 이름과 고객이 주문한 도서의 판매가격 구하기
select c.name, b.bookname, b.price from customer c
left join orders o on c.custid = o.custid
left join book b on b.bookid = o.bookid;
하긴 했는데 결과는 잘 나온 것 같다. 근데 정확히 잘 했는지는 잘 모르겠다.
이거 내가 머릿속으로 테이블로써 생각해보는게 좋을 것 같다.
맨끝에서부터 점점 테이블이 치고 올라오는 거다. 마치 재귀함수 처럼.
그렇게 join on 하고 올라온 테이블을 위의 join on과 비교하는 것이다.
함수짜는 것과 비슷해 보인다.
필요한 것들만 생각하자. 그걸 가져오는 거다.
join on 같은 경우
where 보다 먼저다.
join on 이후의 것을 where로 거르는 거다.
on절은 내가 join해서 가져오는 테이블을 대상으로 하는 where라고 생각하면 된다. (b.price >= 20000 이런것도 된다.)
on은 join에 따라 여러 개 나올 수 있다.
where는 그렇게 최종적으로 나온 결과들을 필터하는 것이다.