Skip to main content
join๊ณผ leftJoin์€ ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์„ ์—ฐ๊ฒฐํ•˜์—ฌ ๊ด€๊ณ„ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋Š” ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค. ํƒ€์ž… ์•ˆ์ „ํ•˜๊ฒŒ ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•˜๊ณ , ๋ณต์žกํ•œ ์กฐ์ธ ์กฐ๊ฑด์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•

INNER JOIN

LEFT JOIN

INNER JOIN: ์–‘์ชฝ ํ…Œ์ด๋ธ” ๋ชจ๋‘์— ๋งค์นญ๋˜๋Š” ๋ ˆ์ฝ”๋“œ๋งŒ ๋ฐ˜ํ™˜ LEFT JOIN: ์™ผ์ชฝ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ ๋ฐ˜ํ™˜ (์˜ค๋ฅธ์ชฝ์€ null ๊ฐ€๋Šฅ)

ํ…Œ์ด๋ธ” ๋ณ„์นญ (Alias)

๋ณ„์นญ ์‚ฌ์šฉ

๊ฐ™์€ ํ…Œ์ด๋ธ” ์—ฌ๋Ÿฌ ๋ฒˆ ์กฐ์ธ

๋ณต์žกํ•œ ์กฐ์ธ ์กฐ๊ฑด

์ฝœ๋ฐฑ ํ•จ์ˆ˜ ์‚ฌ์šฉ

์—ฌ๋Ÿฌ ์กฐ๊ฑด์„ ์กฐํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

OR ์กฐ๊ฑด

์กฐ๊ฑด๊ฐ’๊ณผ ๋น„๊ต

์ปฌ๋Ÿผ๊ณผ ๋ฆฌํ„ฐ๋Ÿด ๊ฐ’์„ ๋น„๊ตํ•  ๋•Œ๋Š” on() ๋Œ€์‹  onVal()์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. on()์€ ์ธ์ž๋ฅผ ์ปฌ๋Ÿผ ์ฐธ์กฐ๋กœ ์ฒ˜๋ฆฌํ•˜๋ฏ€๋กœ, ๊ฐ’์„ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ”์ธ๋”ฉํ•˜๋ ค๋ฉด onVal()์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ’ ๋ฐ”์ธ๋”ฉ (onVal)

onVal์€ ์กฐ์ธ ์กฐ๊ฑด์—์„œ ๊ฐ’์„ ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฐ”์ธ๋”ฉ์œผ๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค. on์ด ๋‘ ์ปฌ๋Ÿผ ๊ฐ„ ๋น„๊ต์— ์‚ฌ์šฉ๋˜๋Š” ๋ฐ˜๋ฉด, onVal์€ ์ปฌ๋Ÿผ๊ณผ ๋ฆฌํ„ฐ๋Ÿด ๊ฐ’์˜ ๋น„๊ต์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
์—ฐ์‚ฐ์ž๋ฅผ ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

andOnVal / orOnVal

andOnVal์€ onVal์˜ ๋ช…์‹œ์ ์ธ AND ๋ฒ„์ „์ด๊ณ , orOnVal์€ OR ์กฐ๊ฑด์œผ๋กœ ๊ฐ’์„ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค.
on vs onVal: on("col1", "col2")๋Š” ๋‘ ์ปฌ๋Ÿผ์„ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค. onVal("col", value)๋Š” ์ปฌ๋Ÿผ๊ณผ ๊ฐ’์„ ๋น„๊ตํ•˜๋ฉฐ, ๊ฐ’์„ SQL ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ”์ธ๋”ฉํ•ฉ๋‹ˆ๋‹ค.

์„œ๋ธŒ์ฟผ๋ฆฌ ์กฐ์ธ

์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ํ…Œ์ด๋ธ”์ฒ˜๋Ÿผ ์กฐ์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ” ์กฐ์ธ

์ˆœ์ฐจ์ ์œผ๋กœ ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹ค์ „ ์˜ˆ์‹œ

์กฐ์ธ ์กฐ๊ฑด ๊ทธ๋ฃนํ•‘

๋ณต์žกํ•œ ์กฐ์ธ ์กฐ๊ฑด์„ ๊ทธ๋ฃน์œผ๋กœ ๋ฌถ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

NULL ์ฒ˜๋ฆฌ (LEFT JOIN)

LEFT JOIN ๊ฒฐ๊ณผ๋Š” nullable ํƒ€์ž…์œผ๋กœ ์ž๋™ ์ถ”๋ก ๋ฉ๋‹ˆ๋‹ค.

์„ฑ๋Šฅ ์ตœ์ ํ™”

1. ํ•„์š”ํ•œ ์ปฌ๋Ÿผ๋งŒ ์„ ํƒ

2. ์กฐ์ธ ์ˆœ์„œ

3. LEFT JOIN vs INNER JOIN

ํƒ€์ž… ์•ˆ์ •์„ฑ

์กฐ์ธํ•œ ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ์€ ํƒ€์ž… ์ž๋™ ์™„์„ฑ๊ณผ ๊ฒ€์ฆ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์˜์‚ฌํ•ญ

1. ๋ณ„์นญ ํ•„์ˆ˜ (์„œ๋ธŒ์ฟผ๋ฆฌ)

2. ์กฐ์ธ ์กฐ๊ฑด ํ…Œ์ด๋ธ” ํ™•์ธ

3. ์ค‘๋ณต ์ปฌ๋Ÿผ๋ช…

4. N+1 ๋ฌธ์ œ

JOIN vs Loader

Puri๋Š” ๋‘ ๊ฐ€์ง€ ๊ด€๊ณ„ ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

JOIN (1:1 ๊ด€๊ณ„)

Loader (1:N ๊ด€๊ณ„)

JOIN์€ ํ–‰์ด ๊ณฑํ•ด์ง€๋ฏ€๋กœ, 1:N ๊ด€๊ณ„์—๋Š” Loader๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ๋‹จ๊ณ„

where

์กฐ๊ฑด ํ•„ํ„ฐ๋งํ•˜๊ธฐ

select

์กฐํšŒํ•  ํ•„๋“œ ์„ ํƒํ•˜๊ธฐ

order-by

๊ฒฐ๊ณผ ์ •๋ ฌํ•˜๊ธฐ

Subset

์„œ๋ธŒ์…‹์œผ๋กœ ๊ด€๊ณ„ ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ