CS/๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

[๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค] ์กฐ์ธ(Join)

1eehyunji 2023. 9. 29. 20:37

์กฐ์ธ(Join)์ด๋ž€ ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”์ด ์•„๋‹Œ ๋‘ ๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”์„ ๋ฌถ์–ด์„œ ํ•˜๋‚˜์˜ ๊ฒฐ๊ณผ๋ฌผ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. 

MySQL์—์„œ๋Š” JOIN์ด๋ผ๋Š” ์ฟผ๋ฆฌ๋กœ, MongoDB์—์„œ๋Š” lookup์ด๋ผ๋Š” ์ฟผ๋ฆฌ๋กœ ์ด๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

(๋‹จ, MongoDB๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ, lookup์€ ๋˜๋„๋ก ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค. ์ด๋Š” ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ JOIN ์—ฐ์‚ฐ์— ๋น„ํ•ด ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง„๋‹ค๊ณ  ์•Œ๋ ค์ ธ ์žˆ๋‹ค.)

 

์กฐ์ธ์˜ ์ข…๋ฅ˜

์กฐ์ธ์˜ ์ข…๋ฅ˜ ์ค‘ ๋Œ€ํ‘œ์ ์œผ๋กœ ๋‚ด๋ถ€ ์กฐ์ธ, ์™ผ์ชฝ ์กฐ์ธ, ์˜ค๋ฅธ์ชฝ ์กฐ์ธ, ํ•ฉ์ง‘ํ•ฉ ์กฐ์ธ์„ ์‚ดํŽด๋ณด์ž!

์•„๋ž˜ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ๋‘ ํ…Œ์ด๋ธ”๊ฐ„์˜ ๊ต์ง‘ํ•ฉ์ด ์žˆ๋‹ค๊ณ  ํ•  ๋•Œ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋„ค ๊ฐ€์ง€ ์กฐ์ธ์ด ์žˆ๋‹ค. 

๋‚ด๋ถ€ ์กฐ์ธ(Inner join)

์™ผ์ชฝ ํ…Œ์ด๋ธ”๊ณผ ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”์˜ ๋‘ ํ–‰์ด ๋ชจ๋‘ ์ผ์น˜ํ•˜๋Š” ํ–‰์ด ์žˆ๋Š” ๋ถ€๋ถ„๋งŒ ํ‘œ๊ธฐํ•œ๋‹ค. ์ฆ‰, ๋‘ ํ…Œ์ด๋ธ” ๊ฐ„์˜ ๊ต์ง‘ํ•ฉ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

์œ„ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ์™ผ์ชฝ ํ…Œ์ด๋ธ”๊ณผ ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”์— CountryID๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์กฐ์ธํ•  ๋•Œ, ๋‘ ํ–‰์ด ๋ชจ๋‘ ์ผ์น˜ํ•˜๋Š” ํ–‰๋งŒ ํ‘œ๊ธฐํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

SELECT * FROM tableA A
INNER JOIN TableB B on
A.key=B.key

 

์™ผ์ชฝ ์กฐ์ธ(left outer join)

์™ผ์ชฝ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ํ–‰์ด ๊ฒฐ๊ณผ ํ…Œ์ด๋ธ”์— ํ‘œ๊ธฐ๋œ๋‹ค. ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”์— ํ•ด๋‹นํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์—” ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”์˜ ํ•ด๋‹นํ•˜๋Š” ์ปฌ๋Ÿผ๋“ค์€ NULL๋กœ ํ‘œ๊ธฐ๋œ๋‹ค. 

SELECT * FROM TableA A
LEFT JOIN TableB B ON
A.key=B.key

 

์˜ค๋ฅธ์ชฝ ์กฐ์ธ(right outer join)

์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ํ–‰์ด ๊ฒฐ๊ณผ ํ…Œ์ด๋ธ”์— ํ‘œ๊ธฐ๋œ๋‹ค. ์™ผ์ชฝ ํ…Œ์ด๋ธ”์— ํ•ด๋‹นํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์œผ๋ฉด ์™ผ์ชฝ ํ…Œ์ด๋ธ”์˜ ํ•ญ๋ชฉ๋“ค์€ NULL๋กœ ํ‘œ๊ธฐ๋œ๋‹ค.

๋งŒ์•ฝ ์œ„ ํ…Œ์ด๋ธ”์—์„œ ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”์— ID=5, Country='USA'์ธ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์—ˆ๋‹ค๋ฉด, ์•„๋ž˜์™€ ๊ฐ™์ด ์ถœ๋ ฅ๋œ ๊ฒƒ์ด๋‹ค.

Date CountryID Units Country
1/3/2020 3 30 Panama
null 5 null USA
SELECT * FROM TableA A
RIGHT JOIN TableB B ON
A.key = B.key

 

ํ•ฉ์ง‘ํ•ฉ ์กฐ์ธ(full outer join)

๋‘ ๊ฐœ์˜ ํ…Œ์ด๋ธ”์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์กฐ์ธ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜์ง€ ์•Š๋Š” ํ–‰๊นŒ์ง€ ๋ชจ๋‘ ํ‘œ๊ธฐ๋œ๋‹ค. ์–‘์ชฝ ํ…Œ์ด๋ธ”์— ์ผ์น˜ํ•˜๋Š” ๋ ˆ์ฝ”๋“œ์™€ ํ•จ๊ป˜ ์–‘์ชฝ ํ…Œ์ด๋ธ”์ด ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ ์ง‘ํ•ฉ์„ ์ƒ์„ฑํ•œ๋‹ค. ์ด๋•Œ, ์ผ์น˜ํ•˜๋Š” ํ•ญ๋ชฉ์ด ์—†๋Š” ๋ ˆ์ฝ”๋“œ๋Š” ๋ˆ„๋ฝ๋œ ์ชฝ์— NULL๋กœ ํ‘œ๊ธฐ๋œ๋‹ค.

SELECT * FROM TableA A
FULL OUTER JOIN TableB B ON
A.key=B.key