여러 테이블 생성시 외래키(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;
'MySQL' 카테고리의 다른 글
MySQL) 3개 이상의 테이블 조인하기 (0) | 2024.05.16 |
---|---|
MySQL) 외래 키 제약 조건 설정에서 참조 무결성 변경하기 (RESTRICT , CASCADE , SET NULL , NO ACTION) (0) | 2024.05.16 |
MySQL) 데이터베이스 DATE(날짜) 가공하는 함수 (0) | 2024.05.16 |
MySQL) Reverse, Char_length, Ifnull 함수 사용하기 (0) | 2024.05.14 |
MySQL) Substring, Replace, Upper/Lower 함수 사용하기 (0) | 2024.05.14 |