์์ ํฌ์คํ ์์ JOIN์ ํ๋ ์ด์ ์ SQL ์ฟผ๋ฆฌ ์คํ ์์์ ๋ํด ์์๋ณด์์ต๋๋ค.
JOIN ์์์ ์ค์์ฑ์ ์ฟผ๋ฆฌ ์ต์ ํ์ ๊ด๋ จ์ด ์์ต๋๋ค.
JOIN ์์์ ์ค์์ฑ
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ตํฐ๋ง์ด์ ๊ฐ ์ด๋ค ํ ์ด๋ธ์ ๋จผ์ ์ฝ๊ณ ์กฐ์ธํ ์ง๋ฅผ ๊ฒฐ์ ํ๋๋ฐ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
JOIN ์์๋ฅผ ์ต์ ํํ๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ง์ด ๋ ํจ์จ์ ์ธ ์คํ ๊ณํ์ ์๋ฆฝํ ์ ์์ผ๋ฉฐ, ์ด๋ ์ ์ฒด์ ์ธ ์ฟผ๋ฆฌ ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
๋จ์ JOIN ์์
๊ฐ๋จํ ์์๋ฅผ ํตํด ์ค๋ช ํ๊ฒ ์ต๋๋ค.
๋ ๊ฐ์ ํ ์ด๋ธ A์ B๊ฐ ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค.
A ํ ์ด๋ธ์ 100๊ฐ์ ํ์ ๊ฐ์ง๊ณ ์๊ณ B ํ ์ด๋ธ์ 100,000๊ฐ์ ํ์ ๊ฐ์ง๊ณ ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
๋ ํ์ด๋ธ์ ๊ณตํต๋ ์ปฌ๋ฐ์ธ `id`๋ฅผ ๊ธฐ์ค์ผ๋ก ์กฐ์ธ๋ฉ๋๋ค.
SELECT *
FROM A
INNER JOIN B ON A.id = B.id;
- B ํ
์ด๋ธ์ ๋จผ์ ์ฝ๋ ๊ฒฝ์ฐ:
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ตํฐ๋ง์ด์ ๊ฐ B ํ ์ด๋ธ์ ๋จผ์ ์ฝ๊ณ ๊ทธ ๊ฒฐ๊ณผ์ A ํ ์ด๋ธ์ ์กฐ์ธํ ๊ฒฝ์ฐ, B ํ ์ด๋ธ์ ํฌ๊ธฐ ๋๋ฌธ์ ๋ง์ ์กฐ์ธ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ํ์ด ์กด์ฌํ ๊ฒ์ ๋๋ค.
- ์ด ๊ฒฝ์ฐ, ์ตํฐ๋ง์ด์ ๋ ์ ์ ์์ A ํ ์ด๋ธ ํ์ ๊ฐ์ ธ์ B ํ ์ด๋ธ๊ณผ ์กฐ์ธํ๋ฉด์ ๋ ํจ์จ์ ์ธ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ต๋๋ค.
- A ํ
์ด๋ธ์ ๋จผ์ ์ฝ๋ ๊ฒฝ์ฐ:
- ๋ฐ๋๋ก, A ํ ์ด๋ธ์ ๋จผ์ ์ฝ๊ณ ๊ทธ ๊ฒฐ๊ณผ์ B ํ ์ด๋ธ์ ์กฐ์ธํ ๊ฒฝ์ฐ, A ํ ์ด๋ธ์ ํฌ๊ธฐ๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ด๊ธฐ์ ์ ์ ์์ ์กฐ์ธ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ํ์ ๊ฐ์ ธ์ฌ ๊ฒ์ ๋๋ค.
- ์ด ๊ฒฝ์ฐ, B ํ ์ด๋ธ์ ํฌ๊ธฐ๊ฐ ํฌ๋๋ผ๋ ์ฒ์์ ๊ฐ์ ธ์ค๋ ํ์ด ์ ๊ธฐ ๋๋ฌธ์ ์ ์ฒด์ ์ผ๋ก ๋น ๋ฅธ ์ฑ๋ฅ์ ๊ธฐ๋ํ ์ ์์ต๋๋ค.
๋ฐ๋ผ์, ์ด๋ค ํ ์ด๋ธ์ ๋จผ์ ์ฝ์์ง์ ๋ฐ๋ผ ์กฐ์ธ ์ฐ์ฐ์ ํจ์จ์ฑ์ด ๋ฌ๋ผ์ง ์ ์์ต๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ตํฐ๋ง์ด์ ๋ ์ด๋ฌํ ์กฐ๊ฑด์ ๊ณ ๋ คํ์ฌ ์ต์ ์ ์คํ ๊ณํ์ ์๋ฆฝํ๋ ค๊ณ ๋ ธ๋ ฅํ์ง๋ง, ๋๋ก๋ ์ฟผ๋ฆฌ๋ฅผ ์ต์ ํํ๊ธฐ ์ํด ๊ฐ๋ฐ์๊ฐ ๋ช ์์ ์ผ๋ก JOIN ์์๋ฅผ ์ง์ ํ๋ ๊ฒ๋ ๊ณ ๋ คํ ๊ฐ์น๊ฐ ์์ต๋๋ค.
3๊ฐ ์ด์์ JOIN ์์
JOIN์ ์ฌ๋ฌ ๊ฐ ์ฌ์ฉํ๋ ์ฟผ๋ฆฌ์์ JOIN ์์๋ ์ฑ๋ฅ์ ํฐ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค.
์์๋ก๋ ์ธ ๊ฐ์ ํ ์ด๋ธ A, B, C๋ฅผ ํตํด JOIN ์์์ ์ค์์ฑ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
SELECT *
FROM A
JOIN B ON A.id = B.id
JOIN C ON B.id = C.id;
- A, B, C ํ
์ด๋ธ ํฌ๊ธฐ:
- A ํ ์ด๋ธ: 1,000 rows
- B ํ ์ด๋ธ: 100,000 rows
- C ํ ์ด๋ธ: 10 rows
- ๊ฐ๋ฅํ JOIN ์์:
- A ํ ์ด๋ธ์ ๋จผ์ ์ฝ๊ณ B ํ ์ด๋ธ๊ณผ ์กฐ์ธํ ํ, ๊ทธ ๊ฒฐ๊ณผ์ C ํ ์ด๋ธ์ ์กฐ์ธํ ์ ์์.
- B ํ ์ด๋ธ์ ๋จผ์ ์ฝ๊ณ C ํ ์ด๋ธ๊ณผ ์กฐ์ธํ ํ, ๊ทธ ๊ฒฐ๊ณผ์ A ํ ์ด๋ธ์ ์กฐ์ธํ ์ ์์.
- C ํ ์ด๋ธ์ ๋จผ์ ์ฝ๊ณ A ํ ์ด๋ธ๊ณผ ์กฐ์ธํ ํ, ๊ทธ ๊ฒฐ๊ณผ์ B ํ ์ด๋ธ์ ์กฐ์ธํ ์ ์์.
- JOIN ์์์ ๋ฐ๋ฅธ ์ํฅ:
- A ํ
์ด๋ธ์ ๋จผ์ ์ฝ๋ ๊ฒฝ์ฐ:
- A ํ ์ด๋ธ์ ํฌ๊ธฐ๊ฐ ์์ผ๋ฏ๋ก ๋จผ์ ์ฝ์ผ๋ฉด์ ์ ์ ์์ ํ์ ๊ฐ์ ธ์ค๊ฒ ๋ฉ๋๋ค.
- ๊ทธ ํ B ํ ์ด๋ธ๊ณผ ์กฐ์ธํ๋ฉด์ ๋ ํฐ ๊ฒฐ๊ณผ ์งํฉ์ ์์ฑํฉ๋๋ค.
- ์ต์ข ์ ์ผ๋ก C ํ ์ด๋ธ๊ณผ ์กฐ์ธํ๋ฉด์ ๊ฒฐ๊ณผ๋ฅผ ์ถ์ํฉ๋๋ค.
- ์ฌ๋ฌ JOIN ์ค์ ๊ฐ์ฅ ํฐ B ํ ์ด๋ธ๊ณผ ์กฐ์ธํ ๋์ ํจ๊ณผ์ ์ผ ์ ์์ต๋๋ค.
- B ํ
์ด๋ธ์ ๋จผ์ ์ฝ๋ ๊ฒฝ์ฐ:
- B ํ ์ด๋ธ์ ํฌ๊ธฐ๊ฐ ํฌ๊ธฐ ๋๋ฌธ์ ๋ง์ ํ์ด ํฌํจ๋ ๊ฒฐ๊ณผ๋ฅผ ์์ฑํฉ๋๋ค.
- ๊ทธ ํ C ํ ์ด๋ธ๊ณผ ์กฐ์ธํ๋ฉด์ ๊ฒฐ๊ณผ๋ฅผ ์ถ์ํฉ๋๋ค.
- ๋ง์ง๋ง์ผ๋ก A ํ ์ด๋ธ๊ณผ ์กฐ์ธํ๋ฉด์ ์ต์ข ๊ฒฐ๊ณผ๋ฅผ ์์ฑํฉ๋๋ค.
- A ํ ์ด๋ธ์ ํฌ๊ธฐ๊ฐ ์๋๋ผ๋ B ํ ์ด๋ธ์ด ํฌ๊ธฐ ๋๋ฌธ์ ๋ถํ์ํ ์กฐ์ธ์ด ๋ง์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
- C ํ
์ด๋ธ์ ๋จผ์ ์ฝ๋ ๊ฒฝ์ฐ:
- C ํ ์ด๋ธ์ ๋งค์ฐ ์๊ธฐ ๋๋ฌธ์ ๋จผ์ ์ฝ์ด๋ ํจ์จ์ ์ ๋๋ค.
- ๊ทธ ํ A ํ ์ด๋ธ๊ณผ ์กฐ์ธํ๋ฉด์ ๊ฒฐ๊ณผ๋ฅผ ํ์ฅํฉ๋๋ค.
- ๋ง์ง๋ง์ผ๋ก B ํ ์ด๋ธ๊ณผ ์กฐ์ธํ๋ฉด์ ์ต์ข ๊ฒฐ๊ณผ๋ฅผ ์์ฑํฉ๋๋ค.
- C ํ ์ด๋ธ์ด ์์ ๊ฒฝ์ฐ์๋ ์ด ๋ฐฉ๋ฒ์ด ํจ๊ณผ์ ์ผ ์ ์์ต๋๋ค.
- A ํ
์ด๋ธ์ ๋จผ์ ์ฝ๋ ๊ฒฝ์ฐ:
์ต์ ์ ์กฐ์ธ ์์ ์ ํ
์ฃผ์ด์ง ํ ์ด๋ธ ํฌ๊ธฐ๋ฅผ ๊ณ ๋ คํ์ฌ ์ต์ ์ JOIN ์ฟผ๋ฆฌ๋ฅผ ๋ง๋ค๊ธฐ ์ํด์๋ ํ ์ด๋ธ ๊ฐ์ ์กฐ์ธ ์์๋ฅผ ๊ฒฐ์ ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
๊ฐ ํ ์ด๋ธ์ ํฌ๊ธฐ์ ๋ฐ์ดํฐ ๋ถํฌ๋ฅผ ๊ณ ๋ คํ์ฌ ํจ์จ์ ์ธ ์กฐ์ธ ์์๋ฅผ ์ฐพ์๋ณด๊ฒ ์ต๋๋ค.
๊ฐ์ฅ ํฐ ํ ์ด๋ธ B์ ๊ฐ์ฅ ์์ ํ ์ด๋ธ C๋ฅผ ๋จผ์ ์กฐ์ธํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ์ A ํ ์ด๋ธ์ ์กฐ์ธํ๋ ๊ฒ์ด ํจ์จ์ ์ผ ์ ์์ต๋๋ค.
์ด๋ B ํ ์ด๋ธ์ด ํฌ๊ธฐ๊ฐ ํฌ๊ณ , C ํ ์ด๋ธ์ด ์๊ธฐ ๋๋ฌธ์ C ํ ์ด๋ธ์ ๋จผ์ ์ฝ๊ณ ์กฐ์ธํ๋ฉด ๋น๊ต์ ์ ์ ์์ ํ์ ์ฒ๋ฆฌํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
SELECT *
FROM B
JOIN C ON B.id = C.id
JOIN A ON B.id = A.id;
์ด ์ฟผ๋ฆฌ์์๋ B ํ ์ด๋ธ์ ๊ธฐ์ค์ผ๋ก C ํ ์ด๋ธ์ ๋จผ์ ์กฐ์ธํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ์ A ํ ์ด๋ธ์ ์กฐ์ธํฉ๋๋ค.
์ด๋ ๊ฒ ํ๋ฉด ์ฒ์์ B์ C์ ์์ ๊ฒฐ๊ณผ ์งํฉ์ ์์ฑํ๊ณ , ๊ทธ ๋ค์์ A์ ์กฐ์ธํ๋ฏ๋ก ์ ์ฒด์ ์ธ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋
ํญ์ ์ด๋ ๊ฒ ์ ํํ ์์๊ฐ ์ต์ ์ผ ๊ฒ์ด๋ผ๊ณ ๊ฐ์ ํ ์ ์์ต๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ตํฐ๋ง์ด์ ๋ ์ฟผ๋ฆฌ ์คํ ๊ณํ์ ์๋ฆฝํ ๋ ์ฌ๋ฌ ๊ฐ์ง ์์๋ฅผ ๊ณ ๋ คํ๋ฉฐ ์ต์ ์ ์คํ ์์๋ฅผ ์ ํํ๋ ค๊ณ ๋ ธ๋ ฅํฉ๋๋ค.
๋ฐ๋ผ์ ํ ์ด๋ธ ํฌ๊ธฐ, ์ธ๋ฑ์ค, ํต๊ณ ์ ๋ณด ๋ฑ์ ๊ธฐ๋ฐ์ผ๋ก ์ตํฐ๋ง์ด์ ๊ฐ ์ต์ ์ ์์๋ฅผ ๊ฒฐ์ ํ๋๋ก ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.