[ MySQL ] Join / Left Join 사용법
Join 이란 ?
두 개 이상의 테이블을 조합하여 하나의 결과 집합으로 만들어내는 것이다.
* 두 개 테이블에 공통으로 들어있는 데이터만 가지고 온다.
select [ 컬럼명 ]
from [ 테이블1 ]
join [ 테이블2 ]
on [ 조인 조건];
예시 1) 두개의 테이블을 하나로 합쳐서 가져오시오
select *
from customers
join orders
on customers.id = orders.customer_id;

예시 2) 주문 금액이 600 달러보다 큰 사람의 이메일을 가져오시오.
* 테이블 이름을 줄여서 사용하는 방법
* 컬럼의 이름이 중복되는 경우는 컬럼의 이름을 바꿔서 가져와야 한다.
select distinct c.email, c.id
from customers c
join orders o
on c.id = o.customer_id
where amount > 600;

예시 3) 주문 금액이 600 달러보다 큰 사람의 이메일과 주문 날짜와 금액을 가져오고,
주문 날짜 내림차순으로 가져오세요.
* 컬럼의 이름이 중복되는 경우는 컬럼의 이름을 바꿔서 가져와야 한다.
select c.email, o.order_date, o.amount
from customers c
join orders o
on c.id = o.customer_id
where amount > 600
order by o.order_date desc;

Left Join 이란?
왼쪽 테이블을 중심으로 오른쪽 테이블을 매치시킨다.
* 왼쪽 테이블의 데이터를 모두 가져오고 공통된 데이터가 없으면 NULL로 표시한다.
select [ 컬럼명 ]
from [ 테이블1 ]
left join [ 테이블2 ]
on [ 조인 조건];
예시 4) 모든 학생 데이터를 가져오되, 성적 정보가 없는 학생도 나타나도록 가져오시오.
select s.first_name, p.title, p.grade
from students s
left join papers p
on s.id = p.student_id;

예시 5) 모든 학생 데이터를 가져오되, 성적 평균이 80점 이상이면 'PASSING',
아니면 'FAILING'으로 채우고, 성적 정보가 없으면 average를 0으로 채우시오.
select s.first_name, ifnull(avg(p.grade), 0) as average,
if(avg(p.grade) > 80, 'PASSING', 'FAILING') as passing_status
from students s
left join papers p
on s.id = p.student_id
group by s.id
order by average desc;

예시 5) 리뷰를 쓴 사람의 이름과 리뷰 수, 리뷰의 최소값, 최대값, 평균값, 리뷰를 쓴 상태를 가져오시오.
( 리뷰를 안쓴 사람의 데이터 값은 0으로, 상태 컬럼은 INACTIVE로 구분해준다. )
* 컬럼 데이터 값이 null인지 구하는 방법
[ 컬럼명 ] is null (O)
[ 컬럼명 ] = null (X)
select rv.first_name, rv.last_name, count(r.rating) as COUNT,
ifnull(min(r.rating), 0) as MIN,
ifnull(max(r.rating), 0)as MAX,
ifnull(avg(r.rating), 0)as AVG,
if(r.rating is null, 'INACTIVE', 'ACTIVE') as STATUS
from reviewers rv
left join reviews r
on rv.id = r.reviewer_id
group by rv.id;

예시 6) 3개의 테이블을 합치는 방법.
select *
from series s
join reviews r
on s.id = r.series_id
join reviewers rv
on r.reviewer_id = rv.id;
