JOIN์ด๋?
JOIN์ ๋ ๊ฐ ์ด์์ ํ
์ด๋ธ์ ํน์ ์กฐ๊ฑด์ ๊ธฐ์ค์ผ๋ก ์ฐ๊ฒฐํด ํ๋์ ๊ฒฐ๊ณผ ์งํฉ์ผ๋ก ๋ง๋๋ SQL ๋ช
๋ น์ด์ด๋ค.
๊ด๊ณํ DB์์ ๋ฐ์ดํฐ๋ ์ค๋ณต์ ์ค์ด๊ธฐ ์ํด ์ฌ๋ฌ ํ
์ด๋ธ๋ก ๋๋์ด ์ ์ฅ๋๋ค.
์ด๋, ๋ถ๋ฆฌ๋ ํ
์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ํจ๊ป ์กฐํํ๊ฑฐ๋ ๋ถ์ํด์ผ ํ ๋ JOIN์ ์ฌ์ฉํ๋ค.
JOIN์ด ํ์ํ ์ด์
๊ด๊ณํ DB๋ ๋ฐ์ดํฐ๋ฅผ ์ ๊ทํํ์ฌ ์ ์ฅํ๋ค.
์๋ฅผ ๋ค์ด ์ฃผ๋ฌธ(Orders) ํ
์ด๋ธ์๋ ๊ณ ๊ฐ ID๋ง ์๊ณ , ์ค์ ๊ณ ๊ฐ ์ด๋ฆ์ ๊ณ ๊ฐ(Customers) ํ
์ด๋ธ์ ์๋ค.
์ด ๋ ํ
์ด๋ธ์ ํจ๊ป ๋ณด๊ธฐ ์ํด์๋ ๋ฐ๋์ JOIN์ด ํ์ํ๋ค.
์ฆ, JOIN์ด ์๋ค๋ฉด ํ ์ด๋ธ๋ง๋ค ๋ฐ๋ก ์กฐํํ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ง์ ํฉ์ณ์ผ ํ๋ ๋ถํธํจ์ด ์๊ธด๋ค.
JOIN์ ์ข ๋ฅ
1) INNER JOIN
๋ ํ ์ด๋ธ์์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ํ๋ง ์กฐํํ๋ค.
SELECT *
FROM Orders AS O
INNER JOIN Customers AS C
ON O.customerId = C.id
- ๋ ํ ์ด๋ธ ๋ชจ๋์ ๋งค์นญ๋๋ ๊ฒฐ๊ณผ๋ง ๊ฐ์ ธ์จ๋ค.
- ํ์ชฝ์ ์๋ ๋ฐ์ดํฐ๋ ๊ฒฐ๊ณผ์์ ์ ์ธ๋๋ค.
2) LEFT JOIN (LEFT OUTER JOIN)
์ผ์ชฝ ํ
์ด๋ธ์ ๋ชจ๋ ํ์ ๋ฐํํ๊ณ ,
์ค๋ฅธ์ชฝ ํ
์ด๋ธ์ ๋งค์นญ๋๋ ๊ฐ์ด ์์ผ๋ฉด NULL๋ก ์ฑ์ด๋ค.
SELECT *
FROM Orders AS O
LEFT JOIN Customers AS C
ON O.customerId = C.id
์ฃผ๋ฌธ์๋ ์์ง๋ง, ๊ณ ๊ฐ ์ ๋ณด๊ฐ ์๋ ๊ฒฝ์ฐ์๋ ์กฐํํ๊ณ ์ถ์ ๋ ์ฌ์ฉ
3) RIGHT JOIN (RIGHT OUTER JOIN)
์ค๋ฅธ์ชฝ ํ
์ด๋ธ์ ๋ชจ๋ ํ์ ๋ฐํํ๊ณ ,
์ผ์ชฝ ํ
์ด๋ธ์ ๋งค์นญ๋๋ ๊ฐ์ด ์์ผ๋ฉด NULL๋ก ์ฑ์ด๋ค.
SELECT *
FROM Orders AS O
RIGHT JOIN Customers AS C
ON O.customerId = C.id
LEFT JOIN์ ๋ฐ๋.
์ค๋ฌด์์๋ LEFT JOIN์ผ๋ก ๋์ฒดํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
4) FULL OUTER JOIN
์์ชฝ ํ
์ด๋ธ์ ๋ชจ๋ ํ์ ๋ฐํํ๊ณ ,
๋งค์นญ๋์ง ์์ ์ชฝ์ NULL๋ก ์ฑ์ด๋ค.
SELECT *
FROM Orders AS O
FULL OUTER JOIN Customers AS C
ON O.customerId = C.id
5) CROSS JOIN
๋ ํ ์ด๋ธ์ ๋ชจ๋ ํ์ ์กฐํฉ์ ๋ฐํํ๋ค. (์นด๋ฐ์์ ๊ณฑ)
SELECT *
FROM Products
CROSS JOIN Colors
Products ํ ์ด๋ธ 3ํ × Colors ํ ์ด๋ธ 4ํ = 12ํ ๋ฐํ.
๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ๊ฑฐ๋ ํ ์คํธ ๋ฐ์ดํฐ ์์ฑ ์ ํ์ฉํ๋ค.
6) SELF JOIN
๊ฐ์ ํ ์ด๋ธ์ ์๊ธฐ ์์ ๊ณผ JOINํ๋ค.
SELECT E.name AS [์ง์]
, M.name AS [์์ฌ]
FROM Employees AS E
LEFT JOIN Employees M
ON E.mgrId = M.empId
์กฐ์ง๋, ๊ณ์ธต ๊ตฌ์กฐ ๋ฐ์ดํฐ๋ฅผ ํํํ ๋ ์ฃผ๋ก ์ฌ์ฉํ๋ค.
JOIN ์ ํ ํ๋์ ๋น๊ต
| JOIN ์ข ๋ฅ | ๋ฐํ ๋ฒ์ | NULL ํฌํจ | ์ฃผ์ ์ฌ์ฉ์ฒ |
| INNER JOIN | ์์ชฝ ๋ชจ๋ ๋งค์นญ๋ ํ | X | ์ผ๋ฐ์ ์ธ ์ฐ๊ฒฐ ์กฐํ |
| LEFT JOIN | ์ผ์ชฝ ์ ์ฒด + ์ค๋ฅธ์ชฝ ๋งค์นญ | O (์ค๋ฅธ์ชฝ) | ๋๋ฝ ๋ฐ์ดํฐ ์กฐํ |
| RIGHT JOIN | ์ค๋ฅธ์ชฝ ์ ์ฒด + ์ผ์ชฝ ๋งค์นญ | O (์ผ์ชฝ) | LEFT JOIN์ผ๋ก ๋์ฒด ๊ฐ๋ฅ |
| FULL OUTER JOIN | ์์ชฝ ์ ์ฒด | O (์์ชฝ) | ๋ฐ์ดํฐ ์ ํฉ์ฑ ๊ฒ์ฆ |
| CROSS JOIN | ๋ชจ๋ ํ์ ์กฐํฉ | X | ๊ฒฝ์ฐ์ ์, ํ ์คํธ ๋ฐ์ดํฐ |
| SELF JOIN | ๋์ผ ํ ์ด๋ธ ๋ด ๊ด๊ณ | ์ ํ | ๊ณ์ธต ๊ตฌ์กฐ, ์ฌ๊ท ๊ด๊ณ |
JOIN ์ฌ์ฉ ์ ์ฃผ์์ฌํญ
โ ON ์กฐ๊ฑด์ ์ ํํ ๋ช ์ํ์
์กฐ๊ฑด์ด ์๋ชป๋๋ฉด ์๋์น ์๊ฒ ์นด๋ฐ์์ ๊ณฑ์ด ๋ฐ์ํ ์ ์๋ค.
โ ์ธ๋ฑ์ค๋ฅผ ํ์ฉํ์
JOIN ์กฐ๊ฑด์ผ๋ก ์ฌ์ฉ๋๋ ์ปฌ๋ผ์ ์ธ๋ฑ์ค๊ฐ ์์ผ๋ฉด ํ ์ค์บ์ด ๋ฐ์ํด ์ฑ๋ฅ์ด ํฌ๊ฒ ๋จ์ด์ง๋ค.
โ ๋ณ์นญ(alias)์ ์ ๊ทน ํ์ฉํ์
์ฌ๋ฌ ํ ์ด๋ธ์ JOIN ํ ๋, ์ปฌ๋ผ๋ช ์ด ๊ฒน์น๋ฉด ์ด๋ ํ ์ด๋ธ์ ์ปฌ๋ผ์ธ์ง ๋ช ์ํด์ผ ํ๋ค.
โ ๋๋ฌด ๋ง์ JOIN์ ํผํ์
JOIN์ด ๋ง์์ง์๋ก ์ฟผ๋ฆฌ ๋ณต์ก๋์ ์ฑ๋ฅ ๋ถ๋ด์ด ์ฆ๊ฐํ๋ค.
ํ์์ ์๋ธ ์ฟผ๋ฆฌ๋ CTE๋ฅผ ํจ๊ป ๊ฒํ ํ๋ค.
๊ฒฐ๋ก : ํ ์ค ์์ฝ
JOIN์ ์ ๊ทํ๋ ์ฌ๋ฌ ํ
์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ํ๋์ ๊ฒฐ๊ณผ๋ก ํฉ์น๋ ํต์ฌ SQL ๋ฌธ๋ฒ์ผ๋ก,
์ด๋ค JOIN์ ์ฐ๋๋์ ๋ฐ๋ผ ๋ฐํ๋๋ ํ์ ๋ฒ์์ NULL ์ฒ๋ฆฌ ๋ฐฉ์์ด ๋ฌ๋ผ์ง๋ค.

References
https://www.w3schools.com/sql/sql_join.asp
https://dev.mysql.com/doc/refman/8.0/en/join.html
https://docs.microsoft.com/ko-kr/sql/relational-databases/performance/joins
'๐ฆ MSSQL SQL Server > ๐๏ธ MSSQL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [MSSQL] PIVOT.. ์ผ๋ก ๋ฐ์ดํฐ ๋๋ฌ๋ํ๊ธฐ (0) | 2026.05.12 |
|---|