๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์๋ ์ ๋ณด๋ฅผ ํจ์จ์ ์ผ๋ก ์ ์ฅํ๊ธฐ ์ํด ์ฌ๋ฌ ํ ์ด๋ธ๋ก ๋๋์ด ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. ๊ทธ๋ฐ๋ฐ, ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ป๊ธฐ ์ํด์๋ ์ด ํ ์ด๋ธ๋ค์ ํฉ์ณ์ผ ํ ๋๊ฐ ๋ง์ต๋๋ค. ๊ทธ๋ด ๋ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ฐ๋ก JOIN์ ๋๋ค.
๋ ๊ฐ ์ด์์ ํ ์ด๋ธ์ **๊ณตํต๋ ์ปฌ๋ผ(์ฃผ๋ก ๊ธฐ๋ณธํค โ ์ธ๋ํค)**์ ๊ธฐ์ค์ผ๋ก ํฉ์น๋ ์์ ์ ๋๋ค.
ํ์ ํ
์ด๋ธ๊ณผ ์ฑ์ ํ
์ด๋ธ์ด ์๋ค๊ณ ์๊ฐํด๋ณด์ธ์.| ์ข ๋ฅ | ํฌํจ ๋ฐ์ดํฐ | null ๋ฐ์ ๊ฐ๋ฅ? | ๊ทธ๋ฆผ์ผ๋ก ๋น์ |
|---|---|---|---|
| INNER JOIN | ๊ณตํต๋ ๊ฐ๋ง (์์ชฝ ํ ์ด๋ธ์ ๋ชจ๋ ์๋ ๋ฐ์ดํฐ) | โ | ๊ต์งํฉ (A โฉ B) |
| LEFT JOIN | ์ผ์ชฝ ํ ์ด๋ธ ์ ์ฒด + ๋งค์นญ๋ ์ค๋ฅธ์ชฝ | โ (์ค๋ฅธ์ชฝ null ๊ฐ๋ฅ) | ์ผ์ชฝ ์ค์ฌ |
| RIGHT JOIN | ์ค๋ฅธ์ชฝ ํ ์ด๋ธ ์ ์ฒด + ๋งค์นญ๋ ์ผ์ชฝ | โ (์ผ์ชฝ null ๊ฐ๋ฅ) | ์ค๋ฅธ์ชฝ ์ค์ฌ |
| FULL JOIN | ์์ชฝ ํ ์ด๋ธ ์ ์ฒด | โ (์์ชฝ ๋ค null ๊ฐ๋ฅ) | ํฉ์งํฉ (A โช B) |
| SELF JOIN | ์๊ธฐ ์์ ๊ณผ ์กฐ์ธ | โ (๊ณ์ธต ํํ์ ํ์ฉ) | ํธ๋ฆฌ ๊ตฌ์กฐ ๋ฑ |
-- ์์ ํ
์ด๋ธ: students(id, name), scores(student_id, score)
-- 1. INNER JOIN: ํ์ ์ค ์ํ ์ ์ ์๋ ์ฌ๋๋ง
SELECT s.name, sc.score
FROM students s
INNER JOIN scores sc ON s.id = sc.student_id;
-- 2. LEFT JOIN: ๋ชจ๋ ํ์์ ๋ณด๊ณ , ์ ์๋ ์์ผ๋ฉด ํ์
SELECT s.name, sc.score
FROM students s
LEFT JOIN scores sc ON s.id = sc.student_id;
-- 3. RIGHT JOIN: ์ ์๊ฐ ์๋ ๊ฒฝ์ฐ๋ง ํ์ ์ ๋ณด ํ์
SELECT s.name, sc.score
FROM students s
RIGHT JOIN scores sc ON s.id = sc.student_id;
-- 4. FULL JOIN (MySQL ๋ฏธ์ง์)
SELECT s.name, sc.score
FROM students s
LEFT JOIN scores sc ON s.id = sc.student_id
UNION
SELECT s.name, sc.score
FROM students s
RIGHT JOIN scores sc ON s.id = sc.student_id;
-- 5. SELF JOIN: ์ง์ ํ
์ด๋ธ์์ ์์ฌ ์ฐพ๊ธฐ
SELECT e.name AS employee, m.name AS manager
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.id;
| JOIN ์ข ๋ฅ | ํต์ฌ ์์ฝ | ๋น๊ณ |
|---|---|---|
| INNER JOIN | ์์ชฝ์ ๋ชจ๋ ์๋ ๋ฐ์ดํฐ๋ง ํฌํจ | ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ |
| LEFT JOIN | ์ผ์ชฝ ํ ์ด๋ธ ์ ๋ถ + ์ค๋ฅธ์ชฝ ๋งค์นญ | ์ค๋ฅธ์ชฝ ์์ผ๋ฉด null |
| RIGHT JOIN | ์ค๋ฅธ์ชฝ ํ ์ด๋ธ ์ ๋ถ + ์ผ์ชฝ ๋งค์นญ | ์ผ์ชฝ ์์ผ๋ฉด null |
| FULL JOIN | ์์ชฝ ํ ์ด๋ธ ์ ์ฒด ํฌํจ | MySQL์ ์ง์ ๋ฏธ์ง์ |
| SELF JOIN | ์๊ธฐ ์์ ๊ณผ ์กฐ์ธ | ๊ณ์ธต์ ๊ตฌ์กฐ ํํ์ ์ฌ์ฉ |