
JOIN์ ๋จ์ํ ํ
์ด๋ธ์ ๋ถ์ด๋ SQL ๋ฌธ๋ฒ์ด ์๋๋ค.
JOIN์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋๋ ์ ์ฅํ๋ ์ด์ ๊ทธ ์์ฒด๋ค.
JOIN์ ๋ฐ๋์ ๊ตฌ์กฐ โ ํ๋ฆ โ ๊ฒฐ๊ณผ ์์๋ก ์ดํดํด์ผ ํ๋ค.
JOIN์ ํ
์ด๋ธ์ ํฉ์น๋ ๊ฒ ์๋๋ผ
์ธ๋ํค(FK)๋ฅผ ๋ฐ๋ผ ์ด๋ํ๋ ๊ฒฝ๋ก๋ฅผ ์ ์ํ๋ ํ์๋ค.
JOIN = ๊ธฐ๋ณธํค(PK)์ ์ธ๋ํค(FK)๋ฅผ ๋ฐ๋ผ ํ ์ด๋ธ ์ฌ์ด๋ฅผ ์ด๋ํ๋ ์ฐ์ฐ
PK (๋ถ๋ชจ ํ ์ด๋ธ) โฒ โ FK (์์ ํ ์ด๋ธ) โ ๋ค๋ฅธ ํ ์ด๋ธ
์ด ๊ตฌ์กฐ๊ฐ ์์ผ๋ฉด JOIN์ ์กด์ฌํ ์ ์๋ค.
customers +------------------+ | customer_id (PK) | | customer_name | +------------------+ orders +------------------+ | order_id (PK) | | customer_id (FK) | | order_date | +------------------+ order_products +----------------------+ | order_item_id (PK) | | order_id (FK) | | product_id (FK) | | quantity | +----------------------+ products +------------------+ | product_id (PK) | | product_name | | price | +------------------+
JOIN์ ์ ํ ์ด๋ธ ์ฌ์ด์ ์ (line)์ ๋ฐ๋ผ ์์ง์ธ๋ค.
customers โ customer_id โผ orders โ order_id โผ order_products โ product_id โผ products
JOIN์ SQL ๋ฌธ๋ฒ์ด ์๋๋ผ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ผ ๋ด๋ ค๊ฐ๊ฑฐ๋ ์ฌ๋ผ๊ฐ๋ ํ์ ๊ณผ์ ์ด๋ค.
JOIN์ด ๋ง์์ง์๋ก ์ฟผ๋ฆฌ๋ ๋ง๋๋ฐ ๊ตฌ์กฐ๊ฐ ํ๋ฆฐ ์ํฉ์ด ๋ฐ์ํ๋ค.
SELECT
c.customer_name,
o.order_id,
o.order_date,
p.product_name,
op.quantity
FROM customers c
JOIN orders o
ON c.customer_id = o.customer_id
JOIN order_products op
ON o.order_id = op.order_id
JOIN products p
ON op.product_id = p.product_id;
์ด ์ฟผ๋ฆฌ๋ ์ด๋ ๊ฒ ์ฝ์ด์ผ ํ๋ค.
1๏ธโฃ customers ์์ ์์
2๏ธโฃ ๊ณ ๊ฐ์ด ๋ง๋ ์ฃผ๋ฌธ์ ์ฐพ๋๋ค
3๏ธโฃ ์ฃผ๋ฌธ์ ํฌํจ๋ ์ํ์ ์ฐพ๋๋ค
4๏ธโฃ ์ํ์ ์์ธ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์จ๋ค
customers โโโ
โโ INNER JOIN โ ๊ฒฐ๊ณผ
orders โโโ
์ฐ๊ฒฐ๋ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด ๊ฒฐ๊ณผ์์ ์ฌ๋ผ์ง๋ค.
์ฆ, ๊ต์งํฉ๋ง ๋จ๋๋ค.
customers โโโโโโโโโโถ ๊ฒฐ๊ณผ (ํญ์ ์ ์ง)
โ
โผ
orders (์์ผ๋ฉด NULL)
LEFT JOIN์
์ถ๋ฐ ํ
์ด๋ธ์ ๋ฌด์กฐ๊ฑด ๊ธฐ์ค์ผ๋ก ์ ์งํ๋ค.
๐ RIGHT JOIN ์ฐ๊ณ ์ถ์ด์ง๋ฉด ํ ์ด๋ธ ์์๋ฅผ ๋ฐ๊ฟ๋ผ
A ํ ์ด๋ธ: 3๊ฑด B ํ ์ด๋ธ: 4๊ฑด ๊ฒฐ๊ณผ: 12๊ฑด (๋ชจ๋ ์กฐํฉ)
CROSS JOIN์
์๋์ ์ผ๋ก ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ง๋ค ๋๋ง ์ฌ์ฉํ๋ค.
์ค์๋ก ์ฐ๋ฉด ์๋ฒ๊ฐ ํฐ์ง..
JOIN์ด ๋๋ฆฌ๋ฉด ๋๋ถ๋ถ ์ธ๋ฑ์ค ๋ฌธ์