MySQL
MySQL - Join 과 Left Join하는 방법
Cong_S
2022. 5. 17. 17:54
다른 두 개의 테이블을 하나로 합쳐서 가져올 수 있는 함수 join과 left join에 대해 알아보자.
-- 두 개 테이블을 하나로 합쳐서 가져오시오. join 사용
select *
from customers
join orders
on customers.id = orders.customer_id;
join 문장은 from 문장 뒤에 적고
from과 join 뒤에 적힌 테이블 두 개를 연결하게 된다.
on 은 테이블 연결할 때 연결고리, 기준점을 적어준다.
select *
from customers c
join orders o
on c.id = o.customer_id;
또 다른 방법 : 테이블 이름을 줄여서 사용하는 방법
테이블 이름 옆에 한 칸 띄고 사용할 줄임말을 적는다. as 는 적어도 되고 안 적어도 된다.
-- 컬럼의 이름이 중복되는 경우, 컬럼 이름을 바꿔서 가져와야 한다.
-- customer_id 도 합쳐지고 두 테이블의 id도 구별되었다.
select c.id as customer_id , c.first_name, c.email,
o.id as order_id, o.amount
from customers c
join orders o
on c.id = o.customer_id;
컬럼의 이름이 중복되는 경우엔 컬럼 이름을 바꿔와서 가져오면 된다.
이 경우엔 데이터가 NULL인 경우엔 데이터가 제외되어 가져오게 된다.
NULL 인 데이터도 가져와야 할때는 Join 말고
left join을 사용한다.
-- left join!!
select *
from customers c
left join orders o
on c.id = o.customer_id;
사용법은 join과 같다.
몇 가지 예시를 보자.
-- 각 고객별로 주문 금액 평균이 300달러 이상인 데이터만 가져오시오.
select c.first_name, c.last_name, avg(o.amount)
from customers c
left join orders o
on c.id = o.customer_id
group by c.id having avg(o.amount) > 300 ;
-- group by 한 후의 결과를 가져올 때에는 where이 아닌 having 을 쓴다.
-- 각 고객별로 주문 금액 최대값이 600달러 이상인 데이터만 가져와서
-- 내림차순으로 정렬하시오.
select c.first_name, c.last_name, c.email, max(o.amount) as max_amount
from customers c
left join orders o
on c.id = o.customer_id
group by c.id having max(o.amount) >= 600
order by max_amount desc;