๐ป [Theory] ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ด๋ถ ์กฐ์ธ๊ณผ ์ธ๋ถ ์กฐ์ธ
๐ป [Theory] ๋ฐ์ดํฐ๋ฒ ์ด์ค ์กฐ์ธ(join)
์ด๋ฒ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ด๋ถ ์กฐ์ธ๊ณผ ์ธ๋ถ ์กฐ์ธ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค ์กฐ์ธ(join)์ด๋ ๋ฌด์์ธ๊ฐ?
- join(์กฐ์ธ) ๋๋ ๊ฒฐํฉ ๊ตฌ๋ฌธ์ ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ด์ ์ฌ๋ฌ ํ ์ด๋ธ์ ๋ ์ฝ๋๋ฅผ ์กฐํฉํ์ฌ ํ๋์ ์ด๋ก ํํํ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ ์กฐ์ธ์ ํ ์ด๋ธ๋ก์ ์ ์ฅ๋๊ฑฐ๋, ๊ทธ ์์ฒด๋ก ์ด์ฉํ ์ ์๋ ๊ฒฐ๊ณผ ์ ์ ๋ง๋ค์ด ๋ธ๋ค.
- JOIN์ ์ฌ๋ฌ๊ฐ์ ํ ์ด๋ธ์์ ๊ฐ๊ฐ์ ๊ณตํต๊ฐ์ ์ด์ฉํจ์ผ๋ก์จ ํ๋๋ฅผ ์กฐํฉํ๋ ์๋จ์ด ๋๋ค.
์กฐ์ธ(join)์ ์ข ๋ฅ
ANSI ํ์ค SQL ์ ๋ค ๊ฐ์ง ์ ํ์ JOIN์ ๊ท์ ํ๋ค.
- INNER JOIN: ๋ด๋ถ์กฐ์ธ -> ๊ต์งํฉ
- OUTER JOIN: ์ธ๋ถ์กฐ์ธ -> ํฉ์งํฉ
- LEFT OUTER JOIN
- RIGHT OUTER JOIN
๊ฐ ์กฐ์ธ๋ค์ ์์์ ํจ๊ป ์์๋ณด๊ฒ ๋ค.
์ง์ JOIN์ ์ฌ์ฉํ๋ฉฐ ์์๋ณด๊ธฐ ์ํด
์๋์ ๊ฐ์ ํ ์ด๋ธ ๋๊ฐ๋ฅผ ์์ฑํ์๋ค.
์ด์ ์ง์ ๊ฐ ์กฐ์ธ๋ค์ ์คํํด๋ณด์.
1.INNER JOIN
- ๊ต์งํฉ์ ํด๋น๋๋ฉฐ ์กฐ๊ฑด์ ๋ง๋ ๊ณตํต์ ์ธ ๋ถ๋ถ๋ง์ SELECT ํ๋ค.
SELECT A.ID, A.KOREAN_NAME, B.ENGLISH_NAME
FROM A INNER JOIN B
ON A.ID = B.ID;
2.OUTER JOIN
- OUTER JOIN์ ์กฐ์ธํ๋ ์ฌ๋ฌํ ์ด๋ธ์์ ํ ์ชฝ์๋ ๋ฐ์ดํฐ๊ฐ ์๊ณ , ํ ์ชฝ์๋ ๋ฐ์ดํฐ๊ฐ ์๋ ๊ฒฝ์ฐ, ๋ฐ์ดํฐ๊ฐ ์๋ ์ชฝ ํ ์ด๋ธ์ ๋ด์ฉ์ ๋ชจ๋ ์ถ๋ ฅํ๋ ๊ฒ์ด๋ค. ์ฆ, ์กฐ๊ฑด์ ๋ง์ง ์์๋ ํด๋นํ๋ ํ์ ์ถ๋ ฅํ๊ณ ์ถ์ ๋ ์ฌ์ฉํ ์ ์๋ค.
OUTER JOIN์
- ๋ชจ๋ ์งํฉ์ ์ถ๋ ฅํ๋ FULL OUTER JOIN
- ์ผ์ชฝ ์งํฉ์ ์ํ๋ ๊ฒ๋ค์ ๋ชจ๋ ์ถ๋ ฅํ๋ FULL LEFT OUTER JOIN
- ์ค๋ฅธ์ชฝ ์งํฉ์ ์ํ๋ ๊ฒ๋ค์ ๋ชจ๋ ์ถ๋ ฅํ๋ FULL RIGHT OUTER JOIN ๋ฑ์ด ์๋ค.
๊ทธ ๋ฐ์๋ LEFT OUTER JOIN ์ ํตํด ์ฐจ์งํฉ (A-B) ์งํฉ์ ๊ตฌํ ์ ์๊ณ ๋ฐ๋๋ก RIGHT OUTER JOIN์ ํตํด ์ฐจ์งํฉ (B-A) ์งํฉ๋ ๊ตฌํ ์ ์๋ค.
2-1 LEFT OUTER JOIN
- ์กฐ์ธ๋ฌธ์ ์ผ์ชฝ์ ์๋ ํ ์ด๋ธ์ ๋ชจ๋ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ ์จ ํ ์ค๋ฅธ์ชฝ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ๋งค์นญํ๊ณ , ๋งค์นญ๋๋ ๋ฐ์ดํฐ๊ฐ ์๋ ๊ฒฝ์ฐ NULL๋ก ํ์ํ๋ค.
SELECT A.ID, A.KOREAN_NAME, B.ENGLISH_NAME
FROM A LEFT OUTER JOIN B
ON A.ID = B.ID;
2-2 RIGHT OUTER JOIN
- ์กฐ์ธ๋ฌธ์ ์ค๋ฅธ์ชฝ์ ์๋ ํ ์ด๋ธ์ ๋ชจ๋ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์จ ํ ์ผ์ชฝ์ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ๋งค์นญํ๊ณ , ๋งค์นญ๋๋ ๋ฐ์ดํฐ๊ฐ ์๋ ๊ฒฝ์ฐ NULL์ ํ์ํ๋ค.
SELECT B.ID, A.KOREAN_NAME, B.ENGLISH_NAME
FROM A RIGHT OUTER JOIN B
ON A.ID = B.ID;
2-3 FULL OUTER JOIN
- LEFT OUTER JOIN ๊ณผ RIGHT OUTER JOIN์ ํฉ์น ๊ฒ์ผ๋ก, ์์ชฝ ๋ชจ๋ ์กฐ๊ฑด์ด ์ผ์นํ์ง ์๋ ๊ฒ๊น์ง ๋ชจ๋ ๊ฒฐํฉํด ์ถ๋ ฅํ๋ค.
SELECT B.ID, A.KOREAN_NAME, B.ENGLISH_NAME
FROM A FULL OUTER JOIN B
ON A.ID = B.ID;
โป MySQL ์์๋ FULL OUTER JOIN ์ด ์์ผ๋ฏ๋ก, LEFT OUTER JOIN ๊ณผ RIGHT OUTER JOIN ์ UNION ํ๋ ์์ผ๋ก ํ์ฌ FULL OUTER JOIN ์ ๋ง๋ค์ด ์ค๋ค.
๋
๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ด๋ถ ์กฐ์ธ๊ณผ ์ธ๋ถ ์กฐ์ธ์ ๋ํด ์์๋ณด์์ต๋๋ค.
๊ฐ์ฌํฉ๋๋ค. ๐
Reference
https://ko.wikipedia.org/wiki/Join_(SQL)
Written on June 9, 2021