# ๐Ÿ“Œ SQL JOIN ์™„์ „ ์ •๋ณต (๊ฐœ๋…๋ถ€ํ„ฐ ์ฝ”๋“œ๊นŒ์ง€)

My Pale Blue Dotยท2025๋…„ 3์›” 27์ผ

DBMS

๋ชฉ๋ก ๋ณด๊ธฐ
6/10
post-thumbnail

๐Ÿ“… ๋‚ ์งœ

2025-03-26

๐Ÿ“ ํ•™์Šต ๋‚ด์šฉ


1๏ธโƒฃ SQL JOIN์ด๋ž€?

โœ… ๊ฐœ๋… ์„ค๋ช…

  • JOIN์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋‘ ๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”์„ ์—ฐ๊ฒฐํ•ด์„œ ํ•˜๋‚˜์˜ ํ†ตํ•ฉ๋œ ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“œ๋Š” SQL ๋ฌธ๋ฒ•์ด๋‹ค.
  • ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ” ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์„ค์ •ํ•˜๊ณ  ์›ํ•˜๋Š” ์ •๋ณด๋ฅผ ๊ฒฐํ•ฉํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.
  • *๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(RDBMS)**์—์„œ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ํ…Œ์ด๋ธ”์ด ์ •๊ทœํ™”๋˜์–ด ๋‚˜๋ˆ ์ ธ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์‹ค์ œ ์ •๋ณด๋ฅผ ๋ณด๊ธฐ ์œ„ํ•ด์„  ์กฐ์ธ์ด ํ•„์ˆ˜์ ์ด๋‹ค.

โœ… ์–ธ์ œ ์‚ฌ์šฉํ• ๊นŒ?

  • ์‚ฌ์› ์ •๋ณด + ๋ถ€์„œ๋ช…์„ ํ•จ๊ป˜ ๋ณด๊ณ  ์‹ถ์„ ๋•Œ
  • ์ฃผ๋ฌธ ๋‚ด์—ญ + ๊ณ ๊ฐ ์ •๋ณด๋ฅผ ํ•œ ๋ฒˆ์— ์กฐํšŒํ•˜๊ณ  ์‹ถ์„ ๋•Œ
  • ํ•™์ƒ ์ •๋ณด + ์„ฑ์  ํ…Œ์ด๋ธ”์„ ํ•จ๊ป˜ ์ถœ๋ ฅํ•˜๊ณ  ์‹ถ์„ ๋•Œ

โœ… ์ฃผ์š” ์‚ฌ์šฉ ํ‚ค์›Œ๋“œ

  • JOIN, ON, LEFT, RIGHT, FULL, CROSS, SELF

2๏ธโƒฃ JOIN ์ข…๋ฅ˜ ์š”์•ฝ

JOIN ์ข…๋ฅ˜์„ค๋ช…
INNER JOIN์กฐ๊ฑด์— ์ผ์น˜ํ•˜๋Š” ํ–‰๋งŒ ๋ฐ˜ํ™˜ (๊ต์ง‘ํ•ฉ)
LEFT OUTER JOIN์™ผ์ชฝ ํ…Œ์ด๋ธ”์€ ๋ชจ๋‘, ์˜ค๋ฅธ์ชฝ์€ ์ผ์น˜ํ•  ๋•Œ๋งŒ ๋ฐ˜ํ™˜
RIGHT OUTER JOIN์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”์€ ๋ชจ๋‘, ์™ผ์ชฝ์€ ์ผ์น˜ํ•  ๋•Œ๋งŒ ๋ฐ˜ํ™˜
FULL OUTER JOIN์–‘์ชฝ ๋ชจ๋‘ ๋ฐ˜ํ™˜, ์ผ์น˜ํ•˜์ง€ ์•Š์œผ๋ฉด NULL
CROSS JOIN๋ชจ๋“  ํ–‰์˜ ์กฐํ•ฉ (์นดํ‹ฐ์…˜ ๊ณฑ)
SELF JOIN์ž๊ธฐ ์ž์‹ ๊ณผ ์กฐ์ธ (์ž๊ธฐ ์ฐธ์กฐ ๊ตฌ์กฐ ํ‘œํ˜„)

3๏ธโƒฃ ๊ฐ ์กฐ์ธ๋ณ„ SQL ์˜ˆ์ œ ๋ฐ ์ƒ์„ธ ์ฃผ์„


โœ… INNER JOIN

-- INNER JOIN: ๋‘ ํ…Œ์ด๋ธ”์—์„œ ์กฐ๊ฑด์— ๋งž๋Š” ๋ฐ์ดํ„ฐ๋งŒ ๊ฐ€์ ธ์˜ด
SELECT E.ENAME,       -- ์‚ฌ์› ์ด๋ฆ„
       D.DNAME        -- ๋ถ€์„œ ์ด๋ฆ„
FROM EMP E            -- EMP ํ…Œ์ด๋ธ”์„ E๋กœ ๋ณ„์นญ ์„ค์ •
INNER JOIN DEPT D     -- DEPT ํ…Œ์ด๋ธ”์„ D๋กœ ๋ณ„์นญ ์„ค์ •ํ•˜์—ฌ ๋‚ด๋ถ€ ์กฐ์ธ
ON E.DEPTNO = D.DEPTNO; -- ์‚ฌ์›์˜ ๋ถ€์„œ๋ฒˆํ˜ธ์™€ ๋ถ€์„œ ํ…Œ์ด๋ธ”์˜ ๋ถ€์„œ๋ฒˆํ˜ธ๊ฐ€ ๊ฐ™์„ ๋•Œ๋งŒ ์ถœ๋ ฅ

๐Ÿ“Œ ์„ค๋ช…: ์กฐ๊ฑด์— ๋งž๋Š” ๋ฐ์ดํ„ฐ๋งŒ ์ถ”์ถœ (์˜ˆ: ์‚ฌ์›์ด ์‹ค์ œ๋กœ ์†ํ•œ ๋ถ€์„œ๋งŒ ํ‘œ์‹œ๋จ)


โœ… LEFT OUTER JOIN

-- LEFT OUTER JOIN: ์™ผ์ชฝ ํ…Œ์ด๋ธ”(EMP)์€ ๋ชจ๋‘, ์˜ค๋ฅธ์ชฝ์€ ๋งค์นญ๋œ ๋ฐ์ดํ„ฐ๋งŒ ์ถœ๋ ฅ
SELECT E.ENAME,
       D.DNAME
FROM EMP E
LEFT OUTER JOIN DEPT D
ON E.DEPTNO = D.DEPTNO;

๐Ÿ“Œ ์„ค๋ช…: ๋ชจ๋“  ์‚ฌ์›์„ ๊ธฐ์ค€์œผ๋กœ ๋ถ€์„œ ์ •๋ณด๋ฅผ ๋ถ™์ž„ โ†’ ๋ถ€์„œ๊ฐ€ ์—†๋Š” ์‚ฌ์›์€ DNAME = NULL


โœ… RIGHT OUTER JOIN

-- RIGHT OUTER JOIN: ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”(DEPT)์€ ๋ชจ๋‘, ์™ผ์ชฝ์€ ๋งค์นญ๋œ ๋ฐ์ดํ„ฐ๋งŒ ์ถœ๋ ฅ
SELECT E.ENAME,
       D.DNAME
FROM EMP E
RIGHT OUTER JOIN DEPT D
ON E.DEPTNO = D.DEPTNO;

๐Ÿ“Œ ์„ค๋ช…: ๋ชจ๋“  ๋ถ€์„œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์‚ฌ์› ์ •๋ณด๋ฅผ ๋ถ™์ž„ โ†’ ์‚ฌ์›์ด ์—†๋Š” ๋ถ€์„œ๋Š” ENAME = NULL


โœ… FULL OUTER JOIN

-- FULL OUTER JOIN: ์–‘์ชฝ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•˜๊ณ  ๋งค์นญ
SELECT E.ENAME,
       D.DNAME
FROM EMP E
FULL OUTER JOIN DEPT D
ON E.DEPTNO = D.DEPTNO;

๐Ÿ“Œ ์„ค๋ช…: ์–‘์ชฝ์— ์กด์žฌํ•˜๋Š” ๋ฐ์ดํ„ฐ๋Š” ๋งค์นญ, ์–ด๋А ํ•œ์ชฝ์—๋งŒ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋„ ํฌํ•จ๋จ


โœ… CROSS JOIN

-- CROSS JOIN: ๋‘ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ์กฐํ•ฉ ์ƒ์„ฑ (์กฐ๊ฑด ์—†์Œ)
SELECT *
FROM EMP
CROSS JOIN DEPT;

๐Ÿ“Œ ์„ค๋ช…: EMP์˜ ๋ชจ๋“  ํ–‰ DEPT์˜ ๋ชจ๋“  ํ–‰ โ†’ ์ „์ฒด ์กฐํ•ฉ (์˜ˆ: EMP 4ํ–‰ DEPT 3ํ–‰ = 12ํ–‰)


โœ… SELF JOIN

-- SELF JOIN: ๊ฐ™์€ ํ…Œ์ด๋ธ”๋ผ๋ฆฌ ์กฐ์ธ (์˜ˆ: ์‚ฌ์›-์ƒ์‚ฌ ๊ด€๊ณ„)
SELECT E.ENAME AS EMPLOYEE,
       M.ENAME AS MANAGER
FROM EMP E
LEFT JOIN EMP M
ON E.MGR = M.EMPNO;

๐Ÿ“Œ ์„ค๋ช…: E๋Š” ๋ถ€ํ•˜ ์ง์›, M์€ ์ƒ์‚ฌ.

โ†’ ํ•œ ํ…Œ์ด๋ธ” ๋‚ด์—์„œ ์ƒํ•˜ ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•  ๋•Œ ์‚ฌ์šฉ


4๏ธโƒฃ ์กฐ์ธ ๋น„๊ต ์š”์•ฝํ‘œ

JOIN ์ข…๋ฅ˜๊ธฐ์ค€ ํ…Œ์ด๋ธ” ์œ ์ง€์กฐ๊ฑด ์ผ์น˜ ์‹œ ์ถœ๋ ฅ์กฐ๊ฑด ๋ถˆ์ผ์น˜ ์‹œ ๊ฒฐ๊ณผ
INNER JOINโŒโœ…โŒ ์ œ์™ธ๋จ
LEFT OUTER JOINโœ… (์™ผ์ชฝ)โœ…โœ… ์˜ค๋ฅธ์ชฝ์€ NULL
RIGHT OUTER JOINโœ… (์˜ค๋ฅธ์ชฝ)โœ…โœ… ์™ผ์ชฝ์€ NULL
FULL OUTER JOINโœ… (์–‘์ชฝ ๋ชจ๋‘)โœ…โœ… ๋‘˜ ๋‹ค NULL ๊ฐ€๋Šฅ
CROSS JOINโŒโŒ ์กฐ๊ฑด ์—†์Œ๋ชจ๋“  ์กฐํ•ฉ
SELF JOINโœ… (์ž๊ธฐ ์ž์‹ )โœ…โœ… ์กฐ๊ฑด์— ๋”ฐ๋ผ NULL ํฌํ•จ

๐Ÿ”ฅ ์ •๋ฆฌ

  • JOIN์€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ์˜ ํ•ต์‹ฌ
  • INNER: ์กฐ๊ฑด์— ๋งž๋Š” ํ–‰๋งŒ
  • OUTER: ๊ธฐ์ค€ ํ…Œ์ด๋ธ” + ์กฐ๊ฑด ๋ถˆ์ผ์น˜ ์‹œ NULL
  • CROSS: ๋ชจ๋“  ํ–‰์˜ ๊ณฑ (์ฃผ์˜ํ•ด์„œ ์‚ฌ์šฉ!)
  • SELF: ๊ฐ™์€ ํ…Œ์ด๋ธ” ์•ˆ์—์„œ ๊ด€๊ณ„ ํ‘œํ˜„

๐Ÿ”— ์ฐธ๊ณ  ์ž๋ฃŒ


โœ… ๋А๋‚€ ์ 

JOIN์€ ๋‹จ์ˆœํžˆ ๋‘ ํ…Œ์ด๋ธ”์„ ๋ฌถ๋Š” ๊ธฐ๋Šฅ์„ ๋„˜์–ด์„œ,

๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ์˜ ์˜๋ฏธ ์žˆ๋Š” ํ•ด์„์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ํ•ต์‹ฌ ๋„๊ตฌ๋ผ๋Š” ๊ฑธ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.

ํŠนํžˆ ์‹ค๋ฌด์—์„œ๋Š” INNER JOIN๊ณผ LEFT JOIN์„ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋ฉฐ,

SELF JOIN์€ ์กฐ์ง ๊ตฌ์กฐ์ฒ˜๋Ÿผ ๊ณ„์ธต์ ์ธ ๋ฐ์ดํ„ฐ ํ‘œํ˜„์— ์œ ์šฉํ•˜๋‹ค๋Š” ๊ฑธ ํ™•์‹คํžˆ ์ดํ•ดํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค!


๐Ÿง  ์š”์•ฝ (Summary)

  • INNER: ๊ณตํ†ต ๋ฐ์ดํ„ฐ๋งŒ
  • LEFT/RIGHT: ํ•œ์ชฝ ๊ธฐ์ค€, ๋‹ค๋ฅธ ์ชฝ์€ NULL ํ—ˆ์šฉ
  • FULL: ์–‘์ชฝ ๋ชจ๋‘ ํฌํ•จ
  • CROSS: ์ „์ฒด ์กฐํ•ฉ (์นดํ‹ฐ์…˜ ๊ณฑ)
  • SELF: ์ž๊ธฐ ์ž์‹ ๊ณผ ์กฐ์ธ (์ƒํ•˜ ๊ด€๊ณ„ ๋“ฑ)
profile
Here, My Pale Blue.๐ŸŒ

0๊ฐœ์˜ ๋Œ“๊ธ€