Skip to content

Latest commit

ย 

History

History
240 lines (160 loc) ยท 7.88 KB

join.md

File metadata and controls

240 lines (160 loc) ยท 7.88 KB

์กฐ์ธ(Join)

Join์˜ ๊ธฐ๋ณธ ๊ฐœ๋…

๋‘๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”(Table)์„ ๊ฒฐํ•ฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ•.

  • ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ๋Š” ์ค‘๋ณต ๋ฐ์ดํ„ฐ๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ชผ๊ฐœ ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”๋กœ ๋‚˜๋ˆ  ์ €์žฅํ•˜๋Š”๋ฐ, ์ด๋ ‡๊ฒŒ ๋ถ„๋ฆฌ๋˜์–ด ์ €์žฅ๋œ ํ…Œ์ด๋ธ”์—์„œ ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์‹œ ๋„์ถœํ•˜๊ธฐ ์œ„ํ•ด์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ…Œ์ด๋ธ”์„ ์กฐํ•ฉํ•ด์•ผํ•  ๋•Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ๋Š” Join์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ด€๋ จ ์žˆ๋Š” ์ปฌ๋Ÿผ ๊ธฐ์ค€์œผ๋กœ ํ–‰์„ ํ•ฉ์ณ์ค๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์•„๋ž˜์™€ ๊ฐ™์€ ํ…Œ์ด๋ธ”์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์ด ๊ฒฝ์šฐ์— ๋ชจ์ข…์˜ ์ด์œ ๋กœ ํ•™์ƒ์˜ ๋‚˜์ด๊ฐ€ ๋ฐ”๋€Œ์—ˆ๋‹ค๋ฉด ๊ฐ ํ–‰์˜ ๋ชจ๋“  ํ•™์ƒ ๋‚˜์ด๋ฅผ ๋ฐ”๊ฟ”์ฃผ์–ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ฐ•์˜๋ช… ๋ถ„๋ฐ˜ ํ•™์ƒ์ด๋ฆ„ ํ•™์ƒ๋‚˜์ด
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค A ํ™๊ธธ๋™ 20
์•Œ๊ณ ๋ฆฌ์ฆ˜ B ํ™๊ธธ๋™ 20

๊ทธ๋ ‡๋‹ค๋ฉด ์ด๋ฒˆ์—๋Š” ์œ„์˜ ํ…Œ์ด๋ธ”์„ ๋‘๊ฐœ์˜ ํ…Œ์ด๋ธ”๋กœ ๋ถ„๋ฆฌ์‹œ์ผœ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

*Table1

๊ฐ•์˜๋ช… ๋ถ„๋ฐ˜ ํ•™์ƒ์ด๋ฆ„
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค A ํ™๊ธธ๋™
์•Œ๊ณ ๋ฆฌ์ฆ˜ B ํ™๊ธธ๋™

*Table2

ํ•™์ƒ์ด๋ฆ„ ํ•™์ƒ๋‚˜์ด
ํ™๊ธธ๋™ 20
๊น€์œ ์‹  21

์ด ๊ฒฝ์šฐ์—๋Š” ํ•™์ƒ์˜ ๋‚˜์ด๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด๋„, Table2์˜ ํ•™์ƒ๋‚˜์ด๋ฅผ ๋ณ€๊ฒฝํ•ด์ค€๋‹ค๋ฉด ๋์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ด์œ ๋กœ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ๋Š” Join์—ฐ์‚ฐ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.


1. Inner Join

์ด๋„ˆ ์กฐ์ธ์€ ๋‘ ๊ฐœ์˜ ํ…Œ์ด๋ธ”์—์„œ ๊ณตํ†ต๋œ ์š”์†Œ๋“ค์„ ํ†ตํ•ด ๊ฒฐํ•ฉํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ, ๋ช…๋ น์–ด ์‚ฌ์šฉ์‹œ INNER JOIN ๋Œ€์‹  JOIN๋งŒ์„ ์ž…๋ ฅํ•ด๋„ INNER JOIN์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋‘ ํ…Œ์ด๋ธ” ๊ฐ„์˜ ๊ณตํ†ต๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์„ ์‹œ(ex : NULL)์—” ์ถœ๋ ฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ฐ‘์˜ ํ‘œ์ฒ˜๋Ÿผ ํ•™์ƒ๋ช…์ด๋ผ๋Š” ๊ณตํ†ต๋œ ์ปฌ๋Ÿผ์„ ๊ฐ€์ง„ ๋‘๊ฐœ์˜ ํ…Œ์ด๋ธ”์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

*Table1

๊ฐ•์˜๋ช… ๋ถ„๋ฐ˜ ํ•™๋ฒˆ
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค A 001
์•Œ๊ณ ๋ฆฌ์ฆ˜ B 002
์ž๋ฃŒ๊ตฌ์กฐ AB NULL

*Table2

ํ•™์ƒ๋ช… ๋‚˜์ด ํ•™๋ฒˆ
ํ™๊ธธ๋™ 22 001
๊น€์œ ์‹  20 002
๊น€์ถ˜์ถ” 21 003

์ด๋•Œ ์กฐ์ธ ๋ช…๋ น์„ ์ž…๋ ฅํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

SELECT Table1.๊ฐ•์˜๋ช…, Table2.ํ•™์ƒ๋ช… 
FROM Table1 JOIN Table2 ON Table1.ํ•™๋ฒˆ = Table2.ํ•™๋ฒˆ

์œ„์˜ ๋ช…๋ น์„ ์‹คํ–‰ํ•œ ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ฐ•์˜๋ช… ํ•™์ƒ๋ช…
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ™๊ธธ๋™
์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊น€์œ ์‹ 

๐Ÿ“Œ (๊ฐ•์˜๋ช…)์ž๋ฃŒ๊ตฌ์กฐ์˜ ๊ฒฝ์šฐ, ํ•™๋ฒˆ์ด ๋ˆ„๋ฝ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ณตํ†ต๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ INNER JOIN ๋ช…๋ น์„ ์‹คํ–‰ํ•ด๋„ ์ถœ๋ ฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.


2. OUTER JOIN

INNER JOIN์€ ๊ณตํ†ต๋œ ๋ถ€๋ถ„์ด ์žˆ๋Š” ํ–‰๋งŒ ์ถœ๋ ฅ์ด ๋˜์—ˆ๋‹ค๋ฉด, OUTER JOIN์€ ๊ณตํ†ต๋œ ๋ถ€๋ถ„์ด ์—†๋Š” ๋ฐ์ดํ„ฐ๋„ ๋ณด๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. OUTER JOIN์€ ํฌ๊ฒŒ LEFT JOIN๊ณผ RIGHT JOIN์œผ๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค. LEFT JOIN๊ณผ RIGHT JOIN์€ ๋ฐฉํ–ฅ๋งŒ ๋‹ค๋ฅผ ๋ฟ ๊ฑฐ์˜ ๊ฐ™์Šต๋‹ˆ๋‹ค.

2-1. LEFT JOIN

LEFT JOIN์€ ๊ณตํ†ต์ ์ธ ๋ถ€๋ถ„๊ณผ, LEFT ํ…Œ์ด๋ธ”์— ์žˆ๋Š” ๊ฒƒ๋งŒ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. LEFT ํ…Œ์ด๋ธ”์ด๋ผ ํ•จ์€ ์œ„์˜ ์‚ฌ์ง„์—์„œ ํ…Œ์ด๋ธ” A(์™ผ์ชฝ ํ…Œ์ด๋ธ”)๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค.

INNER JOIN์—์„œ๋Š” ๊ณตํ†ต๋œ ๋ถ€๋ถ„๋งŒ ์ถœ๋ ฅํ–ˆ๋˜ ๋ฐ˜๋ฉด์—, LEFT JOIN์€ ๊ณตํ†ต๋˜์ง€ ์•Š์€ ๋ถ€๋ถ„๋„ ํ•จ๊ป˜ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

์œ„์˜ Table1 ๊ณผ Table2๋ฅผ ์˜ˆ์‹œ๋กœ ๋“ค์—ˆ์„ ๋•Œ, LEFT JOIN ๋ช…๋ น์„ ์‹คํ–‰ํ•œ๋‹ค๋ฉด ์–ด๋–ค ๊ฐ’์„ ์˜ˆ์ƒํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”?

SELECT Table1.๊ฐ•์˜๋ช…, Table2.ํ•™์ƒ๋ช…
FROM Table1 LEFT JOIN Table2 
ON Table1.ํ•™๋ฒˆ = Table2.ํ•™๋ฒˆ

์œ„์˜ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•œ ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ฐ•์˜๋ช… ํ•™์ƒ๋ช…
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ™๊ธธ๋™
์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊น€์œ ์‹ 
์ž๋ฃŒ๊ตฌ์กฐ NULL

์ €๋ฃŒ๊ตฌ์กฐ์• ๋Š” ๊ณตํ†ต๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ํ•™์ƒ๋ช…์„ ์ถœ๋ ฅํ•˜์ง€ ๋ชปํ•˜์ง€๋งŒ, LEFT ํ…Œ์ด๋ธ”์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋Š” ๋ชจ๋‘ ์ถœ๋ ฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ•์˜๋ช…์— ์žˆ๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.

2.2 RIGHT JOIN

RIGHT JOIN์€ LEFT JOIN๊ณผ ๋ฐฉํ–ฅ๋งŒ ๋‹ค๋ฅผ ๋ฟ ํ˜•์‹์€ ๊ฐ™์Šต๋‹ˆ๋‹ค. RIGHT ํ…Œ์ด๋ธ”์—๋งŒ ์žˆ๋Š” ๊ฒƒ์„ ์ถœ๋ ฅํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์œ„์˜ ์˜ˆ์‹œ ํ…Œ์ด๋ธ”์„ RIGHT JOIN ์—ฐ์‚ฐ์œผ๋กœ ์ˆ˜ํ–‰ํ–ˆ์„ ๋•Œ ์–ด๋–ค ๊ฐ’์„ ์˜ˆ์ƒํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”?

SELECT Table1.๊ฐ•์˜๋ช…, Table2.ํ•™์ƒ๋ช…
FROM Table1 RIGHT JOIN Table2
ON Table1.ํ•™๋ฒˆ = Table2.ํ•™๋ฒˆ

์œ„์˜ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•œ ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ฐ•์˜๋ช… ํ•™์ƒ๋ช…
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ™๊ธธ๋™
์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊น€์œ ์‹ 
NULL ๊น€์ถ˜์ถ”

LEFT JOIN๊ณผ ๋ฐ˜๋Œ€์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2.3 FULL OUTER JOIN

FULLL OUTER JOIN์€ Aํ…Œ์ด๋ธ”๊ณผ Bํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๊ฐ’์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์‰ฝ๊ฒŒ ๋งํ•ด LEFT JOIN๊ณผ RIGHT JOIN์„ ํ•ฉ์นœ ๊ฒฐ๊ณผ๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

SELECT Table1.๊ฐ•์˜๋ช…, Table2.ํ•™์ƒ๋ช…
FROM Table1 FULL OUTER JOIN Table2
ON Table1.ํ•™๋ฒˆ = Table2.ํ•™๋ฒˆ

๐Ÿ“Œ Mysql์—์„œ๋Š” FULL OUTER JOIN ์—ฐ์‚ฐ์„ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. FULL OUTER JOIN์ด ํ•„์š”ํ•  ๋•Œ๋Š” UNION์—ฐ์‚ฐ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

โœ… UNION์„ FULL OUTER JOIN๊ณผ ๋™์ผํ•œ ๊ธฐ๋Šฅ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ

SELECT Table1.๊ฐ•์˜๋ช…, Table2.ํ•™์ƒ๋ช…
FROM Table1 LEFT JOIN Table2
ON Table1.ํ•™๋ฒˆ = Table2.ํ•™๋ฒˆ
UNION
SELECT Table1.๊ฐ•์˜๋ช…, Table2.ํ•™์ƒ๋ช…
FROM Table1 RIGHT JOIN Table2
ON Table1.ํ•™๋ฒˆ = Table2.ํ•™๋ฒˆ

์œ„์˜ ์ฟผ๋ฆฌ๋ฌธ์„ ์‹คํ–‰ํ•œ ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ฐ•์˜๋ช… ํ•™์ƒ๋ช…
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ™๊ธธ๋™
์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊น€์œ ์‹ 
์ž๋ฃŒ๊ตฌ์กฐ NULL
NULL ๊น€์ถ˜์ถ”

3. CROSS JOIN

CROSS JOIN์€ ๋‘ ํ…Œ์ด๋ธ” ๊ฐ„์˜ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

SELECT Table1.๊ฐ•์˜๋ช…, Table2.ํ•™์ƒ๋ช…
FROM Table1 CROSS JOIN Table2

์œ„์˜ ์ฟผ๋ฆฌ๋ฌธ์„ ์‹คํ–‰ํ•œ ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ฐ•์˜๋ช… ํ•™์ƒ๋ช…
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ™๊ธธ๋™
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊น€์œ ์‹ 
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊น€์ถ˜์ถ”
์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ™๊ธธ๋™
์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊น€์œ ์‹ 
์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊น€์ถ˜์ถ”
์ž๋ฃŒ๊ตฌ์กฐ ํ™๊ธธ๋™
์ž๋ฃŒ๊ตฌ์กฐ ๊น€์œ ์‹ 
์ž๋ฃŒ๊ตฌ์กฐ ๊น€์ถ˜์ถ”

์œ„์˜ ๊ฒฐ๊ณผ์ฒ˜๋Ÿผ CROSS JOIN์€ ๋‘ ํ…Œ์ด๋ธ”์˜ ํ–‰๋“ค์„ ์„œ๋กœ ๊ต์ฐจํ•˜์—ฌ ๊ณฑํ•ฉ๋‹ˆ๋‹ค.

4. SELF JOIN

SELF JOIN์€ ๋‘๊ฐœ์˜ ํ…Œ์ด๋ธ”์ด ์•„๋‹Œ ์ž๊ธฐ ์ž์‹ ์˜ ํ…Œ์ด๋ธ”์„ ์ฐธ์กฐํ•˜๋Š” ์—ฐ์‚ฐ์ž…๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ํ…Œ์ด๋ธ” A๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ด…์‹œ๋‹ค. ํ…Œ์ด๋ธ” A๋Š” ์ž์‹ ์˜ ์ •๋ณด์™€ ํŒ€์›์˜ ์ •๋ณด๋ฅผ ํ•จ๊ป˜ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋•Œ ํŒ€์›์˜ ํ•™๋ฒˆ์€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ํŒ€์›์˜ ์ด๋ฆ„์€ ๋ฐ”๋กœ ํ™•์ธํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

*Table A

๋ฒˆํ˜ธ ํ•™์ƒ๋ช… ํ•™๋ฒˆ ์กฐ ํŒ€์›ํ•™๋ฒˆ
1 ํ™๊ธธ๋™ 001 A 002
2 ๊น€์œ ์‹  002 A 001
3 ๊น€์ถ˜์ถ” 003 B 004
4 ์ด์ˆœ์‹  004 B 003

์ด๋•Œ, ํŒ€์›์˜ ์ด๋ฆ„์„ ํ•จ๊ป˜ ๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด SELF JOIN์„ ํ†ตํ•ด ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

SELECT a.ํ•™๋ฒˆ, a.ํ•™์ƒ๋ช…, b.ํ•™์ƒ๋ช… 
FROM A a
JOIN A b
ON a.ํ•™๋ฒˆ = b.ํŒ€์›ํ•™๋ฒˆ

์œ„์˜ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•œ ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํ•™๋ฒˆ ํ•™์ƒ๋ช… ํŒ€์›์ด๋ฆ„
2 ๊น€์œ ์‹  ํ™๊ธธ๋™
1 ํ™๊ธธ๋™ ๊น€์œ ์‹ 
4 ์ด์ˆœ์‹  ๊น€์ถ˜์ถ”
3 ๊น€์ถ˜์ถ” ์ด์ˆœ์‹