MySQL

MySQL) 두 개의 테이블 조인하기

567Rabbit 2024. 5. 16. 16:15

여러 테이블 생성시 외래키(foreign key) 설정하기

 

 

 

decimal(8,2)는 소숫점을 합쳐서 8자리, 소숫점 아래 2자리가 표현된다는 뜻이다.

 

***********

 

외래키에 UN(unsigned data type)을 체크해야 하는 이유

 

customers 테이블의 id(기본키)가 UN(unsigned data type)이 체크되어, 양수값만 나올 수 있으므로

이를 참조하는 customer_id 또한 UN(unsigned data type)으로 데이터 타입을 맞춰줘야 하기 때문이다. 

 

***********

 

 

 

 

Foreign Key Name은 알아서 지정하면 된다.

 

Referenced Table는 참조할 테이블을 지정하는 것이고,

Referenced Column을 customer 테이블의 id 컬럼과, order 테이블의 customer_id 컬럼을 연결해주면 된다.

 

 

 

 

조인하기

- as는 사용해도 되고, 생략해도 된다

 

select *
from students as s
join papers as p
on s.id = p.student_id ;

 

또는

 

select *
from papers p
join students s
on p.student_id = s.id ;

 

 

 

 

LEFT JOIN 과 RIGHT JOIN

 

 

만약 학생테이블의 학생이 paper테이블에 없더라도, 모든 학생을 불러오고 싶다면, left join과 right join을 사용한다.

left join은 왼쪽의 테이블을 모두 보여주는 것이고, right join 은 오른쪽의 테이블을 모두 보여주는 것이다.

join된 테이블은 데이터의 오른쪽에 붙어 생성되므로,

 

select *
from A
join B
on ~ ;

 

A가 왼쪽 테이블, B가 오른쪽 테이블이라고 보면 된다. 그러므로

 

 

 

select *
from students as s
left join papers as p
on s.id = p.student_id ;  이면 students 데이터를 모두 보여주며



select *
from students as s
right join papers as p
on s.id = p.student_id ;  이면 papers의 데이터를 모두 보여준다.

 

 

 

 

 

조건문이 여러개인 조인 테이블

 

-- 2019년 12월 20일부터 2020년 1월 10일 사이의 주문데이터에서 

-- 고객별 주문금액 평균이 300달러 이상인 사람의 이름과 평균금액을 가져오세요

 

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 between '2019-12-20' and '2020-01-10'
group by c.id having avg_amount >= 300
order by avg_amount desc;