FOREIGN KEY로 연결된 orders 테이블의 customer_id와 customer 테이블의 id
-- 두 테이블의 데이터를 하나로 합쳐서 가져오세요.
SELECT *
FROM orders
join customers ON orders.customer_id = customers.id;
JOIN 구문은 ON 과 함께합니다.
orders 테이블에서 customer_id와 customers 테이블의 id가 합치하는 데이터를 불러오게 합니다.
테이블네임은 간략하게 줄여서도 쓸 수 있습니다.
SELECT *
FROM orders o
join customers c
on o.customer_id = c.id;
id가 두개라 구분이 어려우니 as order_id로 불러오면 깔끔!
SELECT o.id as order_id, order_date , amount, customer_id, first_name ,last_name , email
FROM orders o
join customers c
on o.customer_id = c.id;
Join은, 두개 테이블에 공통으로 둘 다 들어있는 데이터만 합쳐 가져옵니다.
-- 우선 실습을 위해 orders테이블의 customers_id인 사람의 데이터를 삭제해보겠습니다.
DELETE FROM orders
WHERE customer_id=2;
-- 회원가입은 했는데 주문은 한번도 안한 사람을 찾아봅시다.
orders에 데이터가 없으면(=NULL) 주문을 한번도 안했겠구나!
SELECT *
FROM customers c
join orders o
on c.id = o.customer_id ;

-- NULL이 왜 안나오지?
join은 두 테이블 다 들어있는 데이터만 합쳐 가져오기 때문입니다.
Left JOIN 구문 알아보기
SELECT *
FROM customers c
left join orders o
on c.id = o.customer_id ;

-- 고객 테이블의 데이터를 기준으로, 오른쪽에 오더테이블을 비교하고 싶다.
-- join문에서 왼쪽 테이블=고객 테이블
-- join의 왼쪽 데이터는 모두 살리고, 오른쪽에 다른 테이블의 데이터를 합치는 조인을 left join이라 한다.
-- right join도 있지만, 기준테이블 먼저보고 비교테이블을 나중에 보는게 좋으니 되도록 left join을 씁시다.
SELECT *
FROM orders o
right join customers c
on o.customer_id = c.id ;
-- 주문 금액이 600달러보다 큰 데이터를 가져오세요.
-- 주문 정보는 모두 보여주고, 주문한 사람의 이메일주소, 이름도 가져오세요.
SELECT o.*, c.first_name ,c.last_name ,c.email
FROM orders o
join customers c ON o.customer_id = c.id
Where o.amount >600;
o.*는 orders테이블의 전체 컬럼이라는 뜻!
-- 위의 결과를 주문날짜 내림차순으로 가져오세요.
SELECT o.*, c.first_name ,c.last_name ,c.email
FROM orders o
join customers c ON o.customer_id = c.id
Where o.amount >600
order by o.order_date desc;
-- 고객 아이디가 36인 사람의 주문내역 가져오세요.
SELECT *
FROM customers c
join orders o on o.customer_id =c.id
where c.id=36;
-- 회원 가입은 했는데 주문은 한번도 안한 고객의 이메일주소를 가져오세요.
SELECT c.id ,c.email
FROM customers c
left join orders o
on c.id =o.customer_id
where o.id is null;
join 구문을 여러번 사용하여 여러 테이블을 붙일 수 있습니다.
SELECT o.id,c.customer_name , p.product_name
FROM orders o
join customers c
on o.customer_id =c.id
join order_items oi
on oi.order_id =o.id
join products p
on oi.product_id =p.id ;