[๋ฐ์ดํฐ๋ฒ ์ด์ค] ์กฐ์ธ(Join)
์กฐ์ธ(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