๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“ฆ MSSQL SQL Server/๐Ÿ—‚๏ธ MSSQL

[MSSQL] SQL JOIN ์™„๋ฒฝ ์ •๋ฆฌ_ํ˜ผ์ž ์žˆ์ง€ ๋ง๊ณ  JOINํ•˜๊ธฐ

by ์‚๋šค์˜ค๋ฆฌ 2026. 4. 19.

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 ์ฒ˜๋ฆฌ ๋ฐฉ์‹์ด ๋‹ฌ๋ผ์ง„๋‹ค.

ํด๋กœ๋“œ๊ฐ€ ์ •๋ฆฌํ•ด์ค€ JOIN ๋‹ค์ด์–ด๊ทธ๋žจ

 

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