๋๊ฐ ์ด์์ ํ ์ด๋ธ(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 | ๊น์ถ์ถ | ์ด์์ |