joinBase
์ค๋ฌด์์ ๋ฐ์ดํฐ ์ถ์ถ์ ํ๋ค ๋ณด๋ฉด join์ ํด์ผํ ์ผ์ด ์์ฃผ ์๊ธด๋ค. ๊ทธ ์ค์์๋ mysql, mariadb์์๋ innerjoin๊ณผ leftjoin์ ํนํ ์์ฃผ ์ฌ์ฉํ๋ค.
๊ธฐ๋ณธ์ ์ธ inner join, left join์ ๊ฐ๋ ๊ณผ, ์ค์ ์ฟผ๋ฆฌ์์๋ join์ด ์ด๋ป๊ฒ ์ฌ์ฉ๋๋์ง ์ ๋ฆฌ๋ฅผ ํ ํ์๊ฐ ์๋ค๊ณ ์๊ฐํด ์ ๋ฆฌ๋ฅผ ํ๊ฒ๋์๋ค.
๋จผ์ ๊ฐ๋ ํํธ์ด๋ค. ์๋ ๊ฐ์ด ์ฌ๋ ํ ์ด๋ธ, ์ํ ํ ์ด๋ธ(์ ์ ๊ฐ ์์ฒญํ ์ํ๋ฅผ ๊ธฐ๋กํ๋ ํ ์ด๋ธ)์ด ์๋ค๊ณ ๊ฐ์ ํ์.
์ฌ๋ ํ
์ด๋ธ
1
๊น์ง์
20
์คํธ๋งจ
2
์ด๋ฏผํ
21
๋ฐฐํธ๋งจ
3
์ง์ธ์ฐ
22
์คํ์ด๋๋งจ
4
์ ์์
22
์ด๋ฒค์ ธ์ค
5
๋จ์ฃผํ
24
์ํผ๋งจ
6
๊น์ง๋ฏผ
24
์ด๋ฒค์ ธ์ค
7
๊น๋จ์ค
24
๋ฐฐํธ๋งจ
์ํ ํ
์ด๋ธ
1
์คํธ๋งจ
2010
2
๋ฐฐํธ๋งจ
2011
3
์ํผ๋งจ
2012
4
์์ด์ธ๋งจ
2012
5
์คํ์ด๋๋งจ
2011
(์ฐธ๊ณ ๋ก mysql์์ join ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ฉด inner join ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๊ฐ๋ค. ๊ธฐ๋ณธ join์ด inner join์ด๋ผ๋ ๊ฒ์ด๋ค.)
์ด ๋ ํ ์ด๋ธ์ ๋ํด left join๊ณผ inner join์ ์คํํด๋ณด์.
select
*
from
people as p
left join movie as m on p.viewed_movie = m.movie_title
order by p.people_id asc;
left join ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ๋ ์๋์ ๊ฐ๋ค.
select
*
from
people as p
inner join movie as m on p.viewed_movie = m.movie_title
order by p.people_id asc;
inner join ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ๋ ์๋์ ๊ฐ๋ค.
์ฐจ์ด์ ์ด ๋ณด์ด๋๊ฐ?
join์ ๊ฐ๋ ์ ์ผ๋ก๋ง ์๊ฐํ๋ฉด ์ปฌ๋ผ์ ๋ํด ์กฐ์ธ์ ์คํํ๋ ๊ฑด๊ฐ ์ถ์์๋ ์๋ค. ํ์ง๋ง join์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ ์ปฌ๋ผ์ ๋ค ํฉ์ณ์ ๋ณด์ฌ์ค๋ค. ๊ทธ๋์ ์ผ๋ถ๋ฌ 'select *'์ผ๋ก from ์ด ์ด๋ค data๋ฅผ ์ฐธ์กฐํ๊ณ ์๋์ง๋ฅผ ๋ณด์ฌ์ฃผ์๋ค.
inner join๊ณผ left join์ ์ฐจ์ด๋ ๋ก์ฐ์์ ์ผ์ด๋๋ค.
p ํ ์ด๋ธ์ m์ ์กฐ์ธํ๋ค๋ฉด p๋ฅผ ๊ธฐ์ค์ผ๋ก m์ ๋งคํํ๊ฒ ๋ค๋ ๋ป์ด๋ค.
p ํ ์ด๋ธ์ m์ left joinํ๋ค๋ฉด p๋ฅผ ๊ธฐ์ค์ผ๋ก m์ ๋งคํํ๋, ์ธ๋ํค๋ฅผ ์ฌ์ฉ(on์์ ์ธ๋ํค ์ฌ์ฉ)ํด์ ๋งคํํ ๊ฐ์ด ์์ด๋ ๊ฒฐ๊ณผ ํ ์ด๋ธ์์ p ํ ์ด๋ธ์ ๋ก์ฐ๊ฐ์ ์ ๋ถ ๋ณด์ฌ๋ฌ๋ผ๋ ๋ป์ด๋ค.
p ํ ์ด๋ธ์ m์ inner joinํ๋ค๋ฉด p๋ฅผ ๊ธฐ์ค์ผ๋ก m์ ๋งคํํ๋, ์ธ๋ํค๋ฅผ ์ฌ์ฉ(on์์ ์ธ๋ํค ์ฌ์ฉ)ํด์ ๋งคํํ ๊ฐ์ด ์๋ค๋ฉด ๊ฒฐ๊ณผ ํ ์ด๋ธ์์ ๊ทธ์ ๋ํ ๋ก์ฐ๊ฐ์ ์ ๋ถ ์ญ์ ํด๋ฌ๋ผ๋ ๋ป์ด๋ค.
2,3 ๋ฒ์ ์์์ ๋ณด์ฌ์ค ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ๋ก ์ฝ๊ฒ ์ดํดํ ์ ์์ ๊ฒ์ด๋ค.
1๋ฒ์ ๋ํด ์์๋ก ๊ตฌ์ฒดํํด ์ค๋ช ํ์๋ฉด, ์๋ ์ฟผ๋ฆฌ๋ฅผ ์คํํด๋ณด์.
select
*
from
movie as m
left join people as p on p.viewed_movie = m.movie_title
order by m.movie_id asc;
์ ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ๋ ์๋์ ๊ฐ๋ค.
(์ฌ๋ ํ ์ด๋ธ๊ณผ ์ํ ํ ์ด๋ธ์ ์ผ๋๋ค ๊ด๊ณ์ด๋ค. ํ ์ฌ๋์ด ์ฌ๋ฌ ์ํ๋ฅผ ๋ณผ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.)
์ํ ํ ์ด๋ธ์ ๊ธฐ์ค์ผ๋ก ํ์ผ๋ฏ๋ก ์ฌ๋ ํ ์ด๋ธ์ viewed_movie์ปฌ๋ผ์ '์ด๋ฒค์ ธ์ค'๋ฐ์ดํฐ๊ฐ ์์ด๋ ๊ฒฐ๊ณผ ํ ์ด๋ธ์์๋ ์ด๋ฒค์ ธ์ค๊ฐ ๋ณด์ด์ง ์๋๋ค. ์๋ํ๋ฉด ์ํ ํ ์ด๋ธ์ ๊ธฐ์ค์ผ๋ก ํ๊ธฐ ๋๋ฌธ์ด๋ค.
์ํ ํ ์ด๋ธ์ '์ด๋ฒค์ ธ์ค'์ ๊ดํ ์ ๋ณด๊ฐ ์์ผ๋ฏ๋ก, ๊ทธ์ ๋ฐ๋ผ ์ฌ๋ ํ ์ด๋ธ๊ณผ ๋งคํ๋์ง ์์ ๊ฒ์ด๋ค.
๊ธฐ์ค์ ๋ํด์ ๊ฐ์ด ์ค๋๊ฐ?
์ด ๊ธฐ์ค์ ์ดํดํ๋ฉด right join์ ๋ํด์๋ ์ดํดํ ์ ์์ ๊ฒ์ด๋ค. ๊ฐ๋จํ๋ค. p right join m์ ํ๋ฉด m left join p์ ๊ฒฐ๊ณผ๊ฐ ๋์ผํ๊ฒ ๋์จ๋ค. ์๋ ์ฟผ๋ฆฌ๋ฅผ ๋ณด์.
select
*
from
people as p
right join movie as m on p.viewed_movie = m.movie_title
order by m.movie_id asc;
๊ฒฐ๊ณผ๊ฐ ๋์ผํ ๊ฒ์ด ๋ณด์ธ๋ค.
์ด๋ ๊ฒ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ left join๊ณผ right join, inner join์ ๊ฐ๋ ์ ์ ๋ฆฌํด๋ณผ ์ ์์๋ค. ๋ค์์๋ ์ข ๋ ๋ณต์กํ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํด join์ ๋ํ ์ดํด๋๋ฅผ ๋ ๋์ฌ๋ณด๊ฒ ๋ค.
Last updated