๋ด๋ถ์กฐ์ธ (join = inner join )์ด๋?
join์ด๋ ๋ ๊ฐ ์ด์์ ํ ์ด๋ธ์ ์๋ก ์ฐ๊ฒฐํ์ฌ ํ๋์ ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ค์ด์ฃผ๋ ๊ฒ์ ๋งํฉ๋๋ค.
inner join( ๋๋ join )์ ๋ด๋ถ์กฐ์ธ์ด๋ผ๊ณ ๋ ๋ถ๋ฆฌ๋ฉฐ, ์กฐ์ธํ ํ ์ด๋ธ ๋ชจ๋ ์๋ ๋ด์ฉ๋ง join๋๋ ๋ฐฉ์์ ๋๋ค.
๋ ํ ์ด๋ธ์ joinํ๊ธฐ ์ํด์๋ ๋ ํ ์ด๋ธ์ด 1:N ๊ด๊ณ๋ก ์ฐ๊ฒฐ๋์ด์ผ ํฉ๋๋ค.
1:N ๊ด๊ณ๋ ์ฃผ๋ก primary key์ foreign key ๊ด๊ณ๋ก ๋งบ์ด์ ธ ์์ต๋๋ค.
(์ํธ์กฐ์ธ์ ๊ฒฝ์ฐ์๋ PK-FK ๊ด๊ณ๊ฐ ์๋์ฌ๋ ๋ฉ๋๋ค.)
SQL JOIN ์์
ํ ์ด๋ธ
- video table
id | title | y_id |
1 | ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ ๋ณต | 2 |
2 | ๋ณผ๋ฆฌ๋น์ ๊ด์ฐ ํ๋ฐฉ๊ธฐ | 4 |
3 | ์นจvsํ ํ ๋ก | 3 |
4 | ์ด์์ฒด์ ์์ ์ ๋ณต | 2 |
5 | ์ถฉ๊ฒฉ์คํ ๋ํ๋ฏผ๊ตญ์ด ํด๋๋ค | Null |
- youtuber table
id | name | ์ฑ๋ ์ค๋ช |
1 | ์ฏ์ | ๋จน๋ฐฉ |
2 | ๊ฐ๋ฐ๋จ๋ ธ์จ | ๊ฐ๋ฐ |
3 | ์นจ์ฐฉ๋งจ | ์๋ฅ |
4 | ๋น ๋๋ณดํ | ์ฌํ |
inner join์ sql query ์์
select * from vedio inner join youtuber on vedio.y_id = youtuber.id;
๊ฒฐ๊ณผ ํ ์ด๋ธ
๋ table์ ๊ณตํต๋ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ๋ ํ์ ๋ํด์๋ง ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํฉ๋๋ค.
video ํ ์ด๋ธ์ id=5๋ youtuber table์ ์์ด Join์ด ๋์ง ์๊ธฐ ๋๋ฌธ์ row๊ฐ ์์ฑ๋์ง ์์ต๋๋ค.
id | title | y_id | name | ์ฑ๋ ์ค๋ช |
1 | ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ ๋ณต | 2 | ๊ฐ๋ฐ๋จ๋ ธ์จ | ๊ฐ๋ฐ |
2 | ๋ณผ๋ฆฌ๋น์ ๊ด์ฐ ํ๋ฐฉ๊ธฐ | 4 | ๋น ๋๋ณดํ | ์ฌํ |
3 | ์นจvsํ ํ ๋ก | 3 | ์นจ์ฐฉ๋งจ | ์๋ฅ |
4 | ์ด์์ฒด์ ์์ ์ ๋ณต | 2 | ๊ฐ๋ฐ๋จ๋ ธ์จ | ๊ฐ๋ฐ |
left outer join(์ธ๋ถ์กฐ์ธ) ์์
select * from vedio left join youtuber on vedio.y_id = youtuber.id;
๊ฒฐ๊ณผ ํ ์ด๋ธ
์ผ์ชฝ video table์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ํฌํจํ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํฉ๋๋ค.
๋๋ฌธ์ youtuber table์๋ ์๋ id=5์ name๊ณผ ์ฑ๋ ์ค๋ช ์ด null๊ฐ์ผ๋ก ์ถ๋ ฅ๋ฉ๋๋ค.
id | title | y_id | name | ์ฑ๋ ์ค๋ช |
1 | ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ ๋ณต | 2 | ๊ฐ๋ฐ๋จ๋ ธ์จ | ๊ฐ๋ฐ |
2 | ๋ณผ๋ฆฌ๋น์ ๊ด์ฐ ํ๋ฐฉ๊ธฐ | 4 | ๋น ๋๋ณดํ | ์ฌํ |
3 | ์นจvsํ ํ ๋ก | 3 | ์นจ์ฐฉ๋งจ | ์๋ฅ |
4 | ์ด์์ฒด์ ์์ ์ ๋ณต | 2 | ๊ฐ๋ฐ๋จ๋ ธ์จ | ๊ฐ๋ฐ |
5 | ์ถฉ๊ฒฉ์คํ ๋ํ๋ฏผ๊ตญ์ด ํด๋๋ค | Null | Null | Null |
JOIN์ ํ๋ ์ด์
JOIN์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ ๊ฐ ์ด์์ ํ ์ด๋ธ ๊ฐ์ ๊ด๋ จ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฒฐํฉํ๋๋ฐ ์ฌ์ฉ๋๋ ์ฐ์ฐ์ ๋๋ค.
์ด ์ฐ์ฐ์ ๋ฐ์ดํฐ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๊ฐ์ ธ์ค๊ณ ์ํ๋ ํ์์ผ๋ก ํ์ํ๊ธฐ ์ํด ์ฌ๋ฌ ํ ์ด๋ธ์ ์กฐ์ธํ์ฌ ์ฌ์ฉํฉ๋๋ค.
๋ํ ์ฌ๋ฌ ํ ์ด๋ธ์ ์กฐ์ธํ์ฌ ์ฟผ๋ฆฌ๋ฅผ ์งค ๋๋ ์ฟผ๋ฆฌ๋ฌธ ์คํ ์์๋ฅผ ์ดํดํ๊ณ ์๋ ๊ฒ์ด ๋งค์ฐ ์ค์ํฉ๋๋ค.
์ฆ, ์ฌ๋ฌ ํ ์ด๋ธ ๊ฐ์ ๊ด๊ณ๊ฐ ์๋ ๋ฐ์ดํฐ๋ฅผ ์กฐํฉํ๊ณ , ํ์ํ ์ ๋ณด๋ฅผ ํจ์จ์ ์ผ๋ก ๊ฐ์ ธ์ค๊ธฐ ์ํด JOIN์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ์์ ์ค์ํ ๊ธฐ๋ฅ ์ค ํ๋์ ๋๋ค.
๋ฐ์ดํฐ ์ ๊ทํ(Normalization)
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค๊ณ์์๋ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์ ์ฅํ๊ธฐ ์ํด ์ฌ๋ฌ ํ ์ด๋ธ๋ก ๋๋๋ ์ ๊ทํ๋ฅผ ์ํํ ์ ์์ต๋๋ค.
์ด๋ก ์ธํด ๋ฐ์ดํฐ์ ์ค๋ณต์ด ๊ฐ์ํ๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ผ๊ด์ฑ์ด ํฅ์๋ฉ๋๋ค.
๊ทธ๋ฌ๋ ์ด๋ก ์ธํด ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ ๋ ์ฌ๋ฌ ํ ์ด๋ธ์ ์กฐํฉํด์ผ ํ ํ์๊ฐ ์์ต๋๋ค.
ํจ์จ์ ์ธ ์ ์ฅ ๋ฐ ๊ด๋ฆฌ
๋ฐ์ดํฐ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ ์ฅํ๊ธฐ ์ํด ํ ์ด๋ธ์ ๋๋๋ฉด ๊ฐ ํ ์ด๋ธ์ ํน์ ์ฃผ์ ๋ ์ ๋ฌด์ ์ง์ค๋ฉ๋๋ค.
์ด๋ก์จ ๊ฐ ํ ์ด๋ธ์ ์๋์ ์ผ๋ก ์๊ณ ๊ด๋ฆฌํ๊ธฐ ์ฌ์ด ํฌ๊ธฐ๋ฅผ ์ ์งํ ์ ์์ต๋๋ค.
๋ฐ์ดํฐ ์ผ์น์ฑ ๋ฐ ๋ฌด๊ฒฐ์ฑ ๋ณด์ฅ
JOIN์ ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ ์ผ์น์ฑ๊ณผ ๋ฌด๊ฒฐ์ฑ์ ์ ์งํ๋ฉด์ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
๊ด๋ จ๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ํ ์ด๋ธ์ ๋๋์ด ์ ์ฅํ๊ณ , JOIN์ ํตํด ํ์ํ ๋๋ง๋ค ํจ๊ณผ์ ์ผ๋ก ๊ฒฐํฉํ ์ ์์ต๋๋ค.
์ ์ฐ์ฑ ๋ฐ ํ์ฅ์ฑ
JOIN์ ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ์ ๊ตฌ์กฐ๋ฅผ ์ ์ฐํ๊ฒ ์กฐ์ ํ๊ณ ์๋ก์ด ๊ด๊ณ๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค.
์ด๋ ์์คํ ์ด ๋ ํฐ ๊ท๋ชจ๋ก ํ์ฅ๋ ๋ ์ ์ฉํฉ๋๋ค.
์ฑ๋ฅ ํฅ์์ ์ํ ์ต์ ํ
๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ง์ JOIN ์ฐ์ฐ์ ์ต์ ํํ๊ธฐ ์ํ ๋ค์ํ ๊ธฐ์ ์ ์ฌ์ฉํฉ๋๋ค.
์ธ๋ฑ์ค, ์ฟผ๋ฆฌ ์ต์ ํ ๋ฐ ์ ์ ํ JOIN ์ ํ ์ ํ ๋ฑ์ ํตํด ๋ฐ์ดํฐ ๊ฒ์ ๋ฐ ์กฐ์์ ์ฑ๋ฅ์ ํฅ์ ์ํฌ ์ ์์ต๋๋ค.
์ฐธ๊ณ