두 개 이상의 테이블을 서로 연결하여 데이터를 검색할 때 사용하는 방법이 바로 join이다.
두 개의 테이블을 마치 하나의 테이블인 것처럼 보여준다.
이외에도 cross join, self join 등이 있다.
가장 많이 쓰는 (inner) join과 left join의 문법을 알아보자.
공통으로 들어있는 값만 가져올 때는 join,
공통된 부분이 없더라도 한 쪽 테이블의 값을 모두 가져오고 싶을 때는 left join을 쓰면 된다.
customers 테이블의 id컬럼과, orders 테이블의 customer_id 컬럼으로 두 테이블을 연결할 수 있다.
select *
from orders
join customers
on orders.customer_id = customers.id;
select *
from orders o
join customers c
on o.customer_id = c.id;
left 조인의 예시를 보자.
-- 모든 고객 데이터를 기준으로, 주문정보를 붙여주세요.
-- 어떤 고객은 주문을 안했는지 확인이 가능함
select *
from customers c
left join orders o
on c.id = o.customer_id;
customers 테이블을 기준으로 left join했기 때문에,
orders 테이블에 공통된 customer_id가 없어도 customers 테이블의 row는 전부 표시된다.
-- 2019년 12월20일부터 2020년1월10일 사이의 주문데이터에서,
-- 고객별 주문금액이 평균 300달러 이상되는 사람의
-- 이름과, 평균주문금액을 상위 7개까지 표시하세요.
select c.first_name, c.last_name, avg(o.amount) as avg_amount
from orders o
join customers c
on o.customer_id = c.id
where o.order_date between '2019-12-20' and '2020-01-10'
group by c.id
having avg(o.amount) >= 300
order by avg_amount desc
limit 7;
'MySQL' 카테고리의 다른 글
MySQL - null을 다른 값으로 대체하는 방법. ifnull( ) (0) | 2022.12.11 |
---|---|
MySQL Workbench - foreign key로 연결되어 있는 데이터 삭제 (0) | 2022.12.10 |
MySQL Workbench에서 foreign key 설정하기 (0) | 2022.12.09 |
MySQL 조건문 사용하기 case, if (0) | 2022.12.09 |
MySQL Workbench에서 insert, update 할 때마다 시간 저장하기 (0) | 2022.12.08 |