๐Ÿ‘ˆ Left OuterJoin

Min-Ho Leeยท2020๋…„ 8์›” 17์ผ
0

Learn SQL

๋ชฉ๋ก ๋ณด๊ธฐ
1/3
post-thumbnail

Monday_August_17
.
.
.
์ผ๋‹จ left join์— ๋Œ€ํ•ด์„œ ์•Œ๊ธฐ ์ „์— RDB(Relationship DataBase)
= ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์— ๋Œ€ํ•ด ์‚ฌ์ „ ์ง€์‹์ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.

๐Ÿค” ๋จธ๋ฆฌ ํšŒ์ „ ์‹œํ‚ค๊ธฐ

๋ชจ๋“  ํ…Œ์ด๋ธ”์ด ์ •๊ทœํ™”๊ฐ€ ๋˜์ง€ ์•Š๊ณ  ํ•˜๋‚˜๋กœ(๋ญ‰์ณ์„œ) ์กด์žฌํ•œ๋‹ค๊ณ  ํ•œ๋‹ค๋ฉด
์ฝ๊ธฐ๋Š” ๋งค์šฐ ์‰ฌ์šธ ๊ฒƒ์ด๊ณ , ์“ฐ๊ธฐ๋Š” ๋งค์šฐ ์–ด๋ ค์šธ ๊ฒƒ์ด๋‹ค.

๋งŒ์•ฝ ์ •๊ทœํ™”๊ฐ€ ์ž˜ ๋˜์–ด์žˆ๊ณ , ํ…Œ์ด๋ธ”๋„ ์ž˜ ๋‚˜๋‰˜์–ด ์žˆ๋‹ค๋ฉด
**์ฝ๊ธฐ๋Š” ๋งค์šฐ ์–ด๋ ค์šธ ๊ฒƒ์ด๊ณ , ์“ฐ๊ธฐ๋Š” ๋งค์šฐ ์‰ฌ์šธ ๊ฒƒ์ด๋‹ค.

์™œ? ์ด๊ฑฐ๋Š” ์‰ฝ๊ณ  ์–ด๋ ต๊ณ ... ์ด์œ ๋ฅผ ๋ชจ๋ฅด๊ฒ ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ƒ๊ฐํ•ด๋ณด์ž.

์ •๊ทœํ™”๊ฐ€ ๋”๋Ÿฝ๊ฒŒ ์•ˆ๋˜๋” ์žˆ๋Š” ํ…Œ์ด๋ธ”์ด ์žˆ๋‹ค. >> ํ…Œ์ด๋ธ” 1๊ฐœ
์ •๊ทœํ™”๊ฐ€ ๋„ˆ๋ฌด ์ž˜ ๋˜์–ด์žˆ๋Š” ํ…Œ์ด๋ธ”์ด ์žˆ๋‹ค. >> ํ…Œ์ด๋ธ” 3๊ฐœ

1๏ธโƒฃ ํ…Œ์ด๋ธ” 1๊ฐœ

1๊ฐœ์ธ ํ…Œ์ด๋ธ”์€ ์™ธ๋ž˜ํ‚ค << ์ด๋Ÿฐ๋†ˆ์„ ์‹ ๊ฒฝ ์“ธ ํ•„์š”์—†์ด ๊ทธ๋ƒฅ ์ญ‰ ์ฝ๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค.
๊ทธ๋ž˜์„œ ์ฝ๊ธฐ๊ฐ€ ์‰ฌ์šด ๊ฒƒ์ด๊ณ , ๋ฐ˜๋ฉด์— ์“ฐ๊ธฐ๊ฐ€ ์™œ ์–ด๋ ต๋‚˜??
์ค‘๋ณต๋˜๋Š” ๊ฐ’์ด 1์–ต๊ฐœ๊ฐ€ ์žˆ๋‹ค๊ณ  ์ณ๋ณด์ž.
์ˆ˜์ •์„ ํ•˜๋ ค๋ฉด 1์–ต๊ฐœ๊ฐ€ ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ ๋‹ค ๋ฐ”๊ฟ”์•ผ ํ•œ๋‹ค.

3๏ธโƒฃ ํ…Œ์ด๋ธ” 3๊ฐœ

3๊ฐœ์ธ ํ…Œ์ด๋ธ”์€ ์™ธ๋ž˜ํ‚ค << ์ด๋Ÿฐ๋†ˆ์„ ์‹ ๊ฒฝ์„ ์จ์ค˜์•ผ ํ•œ๋‹ค.
์ผ๋‹จ ์ฝ๊ธฐ๋Š” ์™œ ์–ด๋ ค์šธ๊นŒ? ํ•œ ํ…Œ์ด๋ธ”์— fk๋ฅผ ๊ฐ–๊ณ  ์žˆ๊ณ , ๊ทธ fk๊ฐ€ ๋‹ค๋ฅธ pk๋ฅผ ์ฐธ์กฐํ•œ๋‹ค๋ฉด ํ•ด๋‹น ํ…Œ์ด๋ธ”์„ ์ฐพ์•„๊ฐ€์„œ ๋˜ ์ฝ์–ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ! ์ฝ๊ธฐ๊ฐ€ ์–ด๋ ค์šด ๊ฒƒ์ด๊ณ , ๋ฐ˜๋Œ€๋กœ ์“ฐ๊ธฐ๋Š” ์™œ ์‰ฝ๋ƒ?? ์ค‘๋ณต๋˜๋Š” ๊ฐ’์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •์‹œ์— ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋งŒ ์ˆ˜์ •ํ•ด๋„ ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์•„๋ฌดํŠผ ๊ทธ๋ž˜์„œ join, ๊ทธ ์ค‘์—์„œ left join(left outer join)์ด ๋ญ๋ƒ?

๐Ÿ‘ˆ Left Join

ํ•œ ๋ฒˆ์— 2๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”์„ ํ•จ๊ป˜ ๋ณด๊ณ ์‹ถ์„ ๋•Œ๊ฐ€ ์žˆ์„ ๊ฒƒ์ด๋‹ค.
๊ทธ๋Ÿด ๋•Œ ๋ฐ”๋กœ join์ด ์“ฐ์ด๋Š” ๊ฒƒ์ด๋‹ค.

์—์–ด๋“œ๋กญ์œผ๋กœ ์‚ฌ์ง„์„ ๋ณด๋ƒˆ๋”๋‹ˆ ํ™•์žฅ์ž๊ฐ€ HEIC? ์ธ๋ฐ
์‚ฌ์ง„์„ ์˜ฌ๋ฆด๋ผ๊ณ  ํ•˜๋‹ˆ ์‚ฌ์ง„์ด ์•ˆ์˜ฌ๋ผ๊ฐ„๋‹ค ใ… ใ… 

a์™€ b๊ฐ€ ๊ฒน์น˜๋Š” ๋ฐด๋‹ค์ด์–ด ๊ทธ๋žจ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž.
a - ๊ต์ง‘ํ•ฉ = 1๋ฒˆ
๊ต์ง‘ํ•ฉ = 2๋ฒˆ (์ฐธ๊ณ ๋กœ ๊ต์ง‘ํ•ฉ ๋ถ€๋ถ„์„ inner join์ด๋ผ๊ณ  ํ•œ๋‹ค.)
b - ๊ต์ง‘ํ•ฉ = 3๋ฒˆ

(์ƒ์ƒ์œผ๋กœ ํ•ด์ฃผ์„ธ์š” ใ… ใ… )

Left Join์ด๋ž€ a ๊ธฐ์ค€์œผ๋กœ 1๋ฒˆ + 2๋ฒˆ์„ ํ•ฉ์ณ์„œ ๋ณด๋Š” ๊ฒƒ์ด๋‹ค.
์ด๊ฒŒ ๋์ด๋‹ค!

๊ทธ๋ƒฅ ์„ค๋ช…์œผ๋กœ ํ•˜๋ฉด ์ดํ•ด๊ฐ€ ์•ˆ๊ฐˆ ์ˆ˜ ์žˆ์œผ๋‹ˆ ์Šค์ƒท์„ ํ†ตํ•ด ๋ณด๋„๋ก ํ•˜์ž.

๋‹ค์Œ๊ณผ ๊ฐ™์€ 2๊ฐœ์˜ ํ…Œ์ด๋ธ”์ด ์žˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์ž์„ธํžˆ ๋ณด๋‹ˆ topic์ด๋ผ๋Š” ํ…Œ์ด๋ธ”์˜ author_id๊ฐ€ author๋ผ๋Š” ํ…Œ์ด๋ธ”์˜ pk์ธ aid๋ฅผ ์ฐธ์กฐํ•œ๋‹ค.

๊ทธ๋ž˜์„œ! ์šฐ๋ฆฌ๋Š” ๋ณด๊ธฐ๊ฐ€ ๋ถˆํŽธํ•˜๋‹ˆ topic์„ ๊ธฐ์ค€์œผ๋กœ(์™ผ์ชฝ์— ๋‘๊ณ )
author์™€ ํ•ฉ์ณ์„œ ๋ณด๊ณ ์‹ถ์—ˆ๋˜ ๊ฒƒ์ด๋‹ค.

๊ทธ๋Ÿผ ์‚ฌ์ง„์† ํ…Œ์ด๋ธ”์„ ์˜ˆ์‹œ๋กœ left join์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

select * from topic LEFT JOIN author ON author_id=author.aid;

(์†Œ๋ฌธ์ž๋กœ ํ•ด๋„ ์ƒ๊ด€์€ ์—†๋‹ค. ๊ทธ๋ƒฅ ๋ˆˆ์— ๋„๋ผ๊ณ  ๋Œ€๋ฌธ์ž๋กœ ์ค€ ๊ฒƒ ์ด๋‹ค.)

ํ•ด์„ํ•˜์ž๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

๋‚˜๋Š” topic์„(๊ธฐ์ค€์œผ๋กœ) ๋ณผ๊ฑฐ์•ผ.
select * from topic

๊ทธ๋Ÿฐ๋ฐ author๋ž‘ left join์„ ํ• ๊ฑฐ์•ผ
select * from topic left join author

์—ฎ์„ ๋•Œ, topic์˜ author_id ๋ผ๋Š” ์นœ๊ตฌ๋Š” authorํ…Œ์ด๋ธ”์˜ aid๋ผ๋Š” pk์•ผ.
select * from topic left join author on author_id=author.aid

์ด๋ ‡๊ฒŒ left join์„ ํ•˜๋ฉด ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

์ฐธ๊ณ ๋กœ ์œ„์—์„œ topicํ…Œ์ด๋ธ”์˜ 4๋ฒˆ์งธ์˜ database๋ผ๋Š” title์„ ๊ฐ€์ง„ ์นœ๊ตฌ๋Š” ์•„๋ฌด๊ฒƒ๋„ ์ฐธ์กฐ๋ฅผ ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—(null) ์˜†์— ๋”ฐ๋ผ์˜ค๋Š” joinํ•œ ํ…Œ์ด๋ธ”์˜ data๋Š” ๋ชจ๋‘ null ์ด๋‹ค.

์ด๊ฒƒ์ด left join์ด๊ณ , ์ฐธ๊ณ ๋กœ left join์€ 2๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”์„ ๋ฌถ์„ ์ˆ˜ ์žˆ๋‹ค.


์„ค๋ช…์ด ์•„์ฃผ ์ž˜ ๋˜์–ด์žˆ๋‹ค. ๊ผญ ์ œ๋ฐœ๐Ÿ™ ์ฐธ๊ณ ํ–ˆ์œผ๋ฉด ์ข‹๊ฒ ๋‹ค.

profile
๐Ÿ‡ Rabbit can take a rest, but ๐Ÿข turtle can't

0๊ฐœ์˜ ๋Œ“๊ธ€

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด