joinBase

์‹ค๋ฌด์—์„œ ๋ฐ์ดํ„ฐ ์ถ”์ถœ์„ ํ•˜๋‹ค ๋ณด๋ฉด join์„ ํ•ด์•ผํ•  ์ผ์ด ์ž์ฃผ ์ƒ๊ธด๋‹ค. ๊ทธ ์ค‘์—์„œ๋„ mysql, mariadb์—์„œ๋Š” innerjoin๊ณผ leftjoin์„ ํŠนํžˆ ์ž์ฃผ ์‚ฌ์šฉํ•œ๋‹ค.

๊ธฐ๋ณธ์ ์ธ inner join, left join์˜ ๊ฐœ๋…๊ณผ, ์‹ค์ œ ์ฟผ๋ฆฌ์—์„œ๋Š” join์ด ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ๋˜๋Š”์ง€ ์ •๋ฆฌ๋ฅผ ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ด ์ •๋ฆฌ๋ฅผ ํ•˜๊ฒŒ๋˜์—ˆ๋‹ค.

๋จผ์ € ๊ฐœ๋… ํŒŒํŠธ์ด๋‹ค. ์•„๋ž˜ ๊ฐ™์ด ์‚ฌ๋žŒ ํ…Œ์ด๋ธ”, ์˜ํ™” ํ…Œ์ด๋ธ”(์œ ์ €๊ฐ€ ์‹œ์ฒญํ•œ ์˜ํ™”๋ฅผ ๊ธฐ๋กํ•˜๋Š” ํ…Œ์ด๋ธ”)์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž.

์‚ฌ๋žŒ ํ…Œ์ด๋ธ”

people_id
name
age
viewed_movie

1

๊น€์ง€์ˆ˜

20

์•คํŠธ๋งจ

2

์ด๋ฏผํ˜

21

๋ฐฐํŠธ๋งจ

3

์ง„์„ธ์—ฐ

22

์ŠคํŒŒ์ด๋”๋งจ

4

์ •์ˆ˜์ •

22

์–ด๋ฒค์ ธ์Šค

5

๋‚จ์ฃผํ˜

24

์Šˆํผ๋งจ

6

๊น€์ง€๋ฏผ

24

์–ด๋ฒค์ ธ์Šค

7

๊น€๋‚จ์ค€

24

๋ฐฐํŠธ๋งจ

์˜ํ™” ํ…Œ์ด๋ธ”

movie_id
movie_title
viewed_at

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 ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

20210826_data01
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 ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

20210826_data02

์ฐจ์ด์ ์ด ๋ณด์ด๋Š”๊ฐ€?

join์„ ๊ฐœ๋…์ ์œผ๋กœ๋งŒ ์ƒ๊ฐํ•˜๋ฉด ์ปฌ๋Ÿผ์— ๋Œ€ํ•ด ์กฐ์ธ์„ ์‹คํ–‰ํ•˜๋Š” ๊ฑด๊ฐ€ ์‹ถ์„์ˆ˜๋„ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ join์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  ์ปฌ๋Ÿผ์„ ๋‹ค ํ•ฉ์ณ์„œ ๋ณด์—ฌ์ค€๋‹ค. ๊ทธ๋ž˜์„œ ์ผ๋ถ€๋Ÿฌ 'select *'์œผ๋กœ from ์ด ์–ด๋–ค data๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š”์ง€๋ฅผ ๋ณด์—ฌ์ฃผ์—ˆ๋‹ค.

inner join๊ณผ left join์˜ ์ฐจ์ด๋Š” ๋กœ์šฐ์—์„œ ์ผ์–ด๋‚œ๋‹ค.

  1. p ํ…Œ์ด๋ธ”์— m์„ ์กฐ์ธํ•œ๋‹ค๋ฉด p๋ฅผ ๊ธฐ์ค€์œผ๋กœ m์„ ๋งคํ•‘ํ•˜๊ฒ ๋‹ค๋Š” ๋œป์ด๋‹ค.

  2. p ํ…Œ์ด๋ธ”์— m์„ left joinํ•œ๋‹ค๋ฉด p๋ฅผ ๊ธฐ์ค€์œผ๋กœ m์„ ๋งคํ•‘ํ•˜๋˜, ์™ธ๋ž˜ํ‚ค๋ฅผ ์‚ฌ์šฉ(on์—์„œ ์™ธ๋ž˜ํ‚ค ์‚ฌ์šฉ)ํ•ด์„œ ๋งคํ•‘ํ•  ๊ฐ’์ด ์—†์–ด๋„ ๊ฒฐ๊ณผ ํ…Œ์ด๋ธ”์—์„œ p ํ…Œ์ด๋ธ”์˜ ๋กœ์šฐ๊ฐ’์€ ์ „๋ถ€ ๋ณด์—ฌ๋‹ฌ๋ผ๋Š” ๋œป์ด๋‹ค.

  3. 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;

์œ„ ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

20210826_data03

(์‚ฌ๋žŒ ํ…Œ์ด๋ธ”๊ณผ ์˜ํ™” ํ…Œ์ด๋ธ”์€ ์ผ๋Œ€๋‹ค ๊ด€๊ณ„์ด๋‹ค. ํ•œ ์‚ฌ๋žŒ์ด ์—ฌ๋Ÿฌ ์˜ํ™”๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.)

์˜ํ™” ํ…Œ์ด๋ธ”์„ ๊ธฐ์ค€์œผ๋กœ ํ–ˆ์œผ๋ฏ€๋กœ ์‚ฌ๋žŒ ํ…Œ์ด๋ธ”์˜ 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;  
20210826_data05

๊ฒฐ๊ณผ๊ฐ€ ๋™์ผํ•œ ๊ฒƒ์ด ๋ณด์ธ๋‹ค.

์ด๋ ‡๊ฒŒ ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด์„œ left join๊ณผ right join, inner join์˜ ๊ฐœ๋…์„ ์ •๋ฆฌํ•ด๋ณผ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๋‹ค์Œ์—๋Š” ์ข€ ๋” ๋ณต์žกํ•œ ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด join์— ๋Œ€ํ•œ ์ดํ•ด๋„๋ฅผ ๋” ๋†’์—ฌ๋ณด๊ฒ ๋‹ค.

Last updated