๐Ÿ”— SQL JOIN ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๊ธฐ

๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ๋Š” ์ •๋ณด๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”๋กœ ๋‚˜๋ˆ„์–ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ, ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ด ํ…Œ์ด๋ธ”๋“ค์„ ํ•ฉ์ณ์•ผ ํ•  ๋•Œ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿด ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ JOIN์ž…๋‹ˆ๋‹ค.


๐Ÿ“Œ JOIN์ด๋ž€?

๋‘ ๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”์„ **๊ณตํ†ต๋œ ์ปฌ๋Ÿผ(์ฃผ๋กœ ๊ธฐ๋ณธํ‚ค โ†” ์™ธ๋ž˜ํ‚ค)**์„ ๊ธฐ์ค€์œผ๋กœ ํ•ฉ์น˜๋Š” ์ž‘์—…์ž…๋‹ˆ๋‹ค.

๐Ÿง  ์‹ค์ƒํ™œ ๋น„์œ 


๐Ÿ” 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 ์ž๊ธฐ ์ž์‹ ๊ณผ ์กฐ์ธ ๊ณ„์ธต์  ๊ตฌ์กฐ ํ‘œํ˜„์— ์‚ฌ์šฉ