์ฌ๋ฌ ํ ์ด๋ธ ์์ฑ์ ์ธ๋ํค(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;