๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ์žฅ์›์ต ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ
๐Ÿ“š ์‹œ๋ฆฌ์ฆˆ/- ์ดˆ๋ณด์ž๋„ ์ค€๋น„ํ•˜๋Š” SQL ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ

[์ดˆ๋ณด์ž๋„ ์ค€๋น„ํ•˜๋Š” SQL ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ] SQL ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ์˜ ๊ฝƒ ์กฐ์ธ

by Wonit 2021. 2. 25.

์นดํ…Œ๊ณ ๋ฆฌ ์ดˆ๋ณด์ž๋„ ์ค€๋น„ํ•˜๋Š” SQL ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ์— ๊ฐ€์‹œ๋ฉด ํ•ด๋‹น ์‹œ๋ฆฌ์ฆˆ๋ฅผ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชฉ์ฐจ

  • JOIN
    • ์กฐ์ธ์ด๋ž€?
    • ๊ด€๊ณ„๋ž€?
    • 1:N ๊ด€๊ณ„
  • INNER JOIN
    • ์กฐ์ธ์—์„œ ์กฐ๊ฑด ์ถ”๊ฐ€ํ•˜๊ธฐ
    • ์กฐ์ธ์—์„œ ์ •๋ ฌํ•˜๊ธฐ
  • OUTER JOIN
    • LEFT JOIN
    • RIGHT JOIN

์กฐ์ธ

JOIN์€ SQL ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ์—์„œ ์ถœ์ œ ์ˆœ์œ„ 1์ˆœ์œ„๋กœ ๊ฐ€์žฅ ๊ฐ€์žฅ ๊ฐ€์žฅ ์ค‘์š”ํ•˜๋ฉด์„œ ์–ด๋ ค์šด ๋ถ€๋ถ„์ด๋‹ค.


์‚ฌ์‹ค์ƒ ์ง€๊ธˆ๊นŒ์ง€ ๋ฐฐ์› ๋˜ ๊ฒƒ๋“ค์ด ์ด๋ฒˆ JOIN์„ ์ด์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ฐฐ์› ๋‹ค๊ณ (๋ฌผ๋ก  ์‹ค์ œ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์—”์ง€๋‹ˆ์–ด๋ง ์ž…์žฅ์—์„œ ๊ทธ ๋‘˜์˜ ์ƒ๊ด€ ๊ด€๊ณ„๋Š” ํฌ๊ฒŒ ์—†์ง€๋งŒ) ํ•ด๋„ ๊ณผ์–ธ์ด ์•„๋‹ˆ๋‹ค.

์กฐ์ธ์ด๋ž€?

์ง€๊ธˆ๊นŒ์ง€ ์šฐ๋ฆฌ๋Š” ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ” ์ด๋ฅผํ…Œ๋ฉด usertb1์ด๋‚˜ buytb1์—์„œ๋งŒ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ–ˆ์—ˆ๋‹ค.


ํ•˜์ง€๋งŒ ์ง€๊ธˆ ๋ฐฐ์šธ JOIN์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ…Œ์ด๋ธ”์—์„œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

์ฆ‰, ๋‘ ๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”์„ ์„œ๋กœ ๋ฌถ์–ด์„œ ํ•˜๋‚˜์˜ ๊ฒฐ๊ณผ ์ง‘ํ•ฉ์œผ๋กœ ๋งŒ๋“ค์–ด๋‚ด๋Š” ๊ฒƒ์ด๋‹ค.

์ด๋Ÿฌํ•œ ์กฐ์ธ์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ ์•Œ์•„์•ผํ•  ๊ฒƒ์ด ์žˆ๋‹ค.

๋ฐ”๋กœ ๊ด€๊ณ„์ด๋‹ค.

๊ด€๊ณ„๋ž€?

๊ด€๊ณ„๋Š” RDBMS ์˜ˆ๋ฅผ ๋“ค์–ด MySQL์ด๋‚˜ MsSQL์ด๋‚˜ Oracle๊ณผ ๊ฐ™์ด ๊ฑฐ์˜ ๋Œ€๋ถ€๋ถ„ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋œปํ•œ๋‹ค.


์ด๋ฅผ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ผ๊ณ  ํ•˜๋Š”๋ฐ, ์ด ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ˜๋ช…์ด๋ผ๊ณ  ๋ถˆ๋ฆฌ๊ธฐ๋„ ํ•œ๋‹ค.


๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ๋“ค์€ ๋ชจ๋‘ ๊ด€๊ณ„๋ฅผ ๋งบ๊ณ  ์žˆ๋Š”๋ฐ, ๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ด€๊ณ„๊ฐ€ ์žˆ๋‹ค.

  • 1:1
  • 1:N ์‚ฌ์šฉ์ž ํ•œ ๋ช…์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ƒํ’ˆ์„ ๊ตฌ๋งคํ•  ์ˆ˜ ์žˆ๋‹ค.
  • N:M

์ด ๋ชจ๋“  ๊ด€๊ณ„๋ฅผ ๋‹ค๋ฃจ์ง€๋Š” ์•Š์„ ๊ฒƒ์ด๊ณ  ์šฐ๋ฆฌ๋Š” 1:N ๊ด€๊ณ„๋งŒ ๋‹ค๋ฃฐ ๊ฒƒ์ด๋‹ค.

๋งŒ์•ฝ ๊ด€๊ณ„์— ๋Œ€ํ•ด์„œ ๋” ๊นŠ๊ฒŒ ์•Œ๊ณ ์‹ถ์€ ์‚ฌ๋žŒ์€ ์œ„์ง€์›์˜ ์‚ฝ์งˆ ๋ธ”๋กœ๊ทธ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ด€๊ณ„!๋ฅผ ์•Œ์•„๋ณด์ž์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
๋‚ด๊ฐ€ ๊ณต๋ถ€ํ•  ๋–„ ๋„์›€์„ ์ •๋ง ๋งŽ์ด ๋ฐ›์€ ์•„์ฃผ ์ข‹์€ ๋ธ”๋กœ๊ทธ์ด๋‹ค.

1:N ๊ด€๊ณ„

JOIN์€ 1:N ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.


์ฟผ๋ฆฌ๋ฌธ๊นŒ์ง€ ๊ฑฐ์˜ ๋‹ค ์™”๋‹ค.


์ด๋ก ์—์„œ ์กฐ๊ธˆ๋งŒ ์ฐธ์•„๋ณด์ž.

 

์šฐ๋ฆฌ๊ฐ€ ์ƒ˜ํ”Œ๋กœ ๊ฐ–๊ณ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ๊ณ„์† ๋งํ•˜๋Š” ๊ฒƒ์€ ํ•œ ๋ช…์˜ ์‚ฌ์šฉ์ž๋Š” ์—ฌ๋Ÿฌ ์ƒํ’ˆ์„ ๊ตฌ๋งคํ•  ์ˆ˜ ์žˆ๋‹ค.์ด๋‹ค.


์ด ์ฆ๊ฑฐ๊ฐ€ ๋ฐ”๋กœ buytb1์—์„œ usertb1์˜ userid๋ฅผ ์™ธ๋ž˜ํ‚ค๋กœ ๊ฐ–๊ณ  ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

๋งŒ์•ฝ ์™ธ๋ž˜ํ‚ค์— ๋Œ€ํ•ด์„œ ์•Œ์ง€ ๋ชปํ•œ๋‹ค๋ฉด ์™ธ๋ž˜ํ‚ค ์ดํ•ดํ•˜๊ธฐ-๋น„์ „๊ณต์ž๋ฅผ ์œ„ํ•œ SQL์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด 1:N ๊ด€๊ณ„์—์„œ ์šฐ๋ฆฌ๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ usertb1์˜ userid๋ฅผ ๊ฐ€์ง€๊ณ  ํ•ด๋‹น user๊ฐ€ ๊ตฌ์ž…ํ•œ ๋ชจ๋“  ์ •๋ณด๋ฅผ buytb1์—์„œ ๊ฐ€์ ธ์™€ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

์•„๊นŒ ์•ž์—์„œ ๋ญ๋ผํ–ˆ๋Š”๊ฐ€? JOIN์€ ๋‘ ๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”์„ ์„œ๋กœ ๋ฌถ์–ด์„œ ํ•˜๋‚˜์˜ ๊ฒฐ๊ณผ ์ง‘ํ•ฉ์œผ๋กœ ๋งŒ๋“ค์–ด๋‚ด๋Š” ๊ฒƒ์ด๋‹ค. ๋ผ๊ณ  ํ–ˆ๋‹ค.

 

์ด์ œ ์™œ JOIN์„ ์จ์•ผํ•˜๋Š”์ง€ ๋˜ ์–ด๋””์„œ ์จ์•ผํ•˜๋Š”์ง€ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.


๊ทธ๋Ÿผ ์–ด๋–ป๊ฒŒ ์จ์•ผ ํ•˜๋Š”์ง€๋ฅผ ์•Œ์•„๋ณด์ž.

INNER JOIN

INNER JOIN์€ ์กฐ์ธ ์ค‘์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ์กฐ์ธ์ด๋‹ค.

์‹ค์ œ๋กœ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ๋ ๊นŒ?

์‹ค์ œ๋กœ JOIN์€ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ๋ ๊นŒ?

 

์šฐ๋ฆฌ๊ฐ€ ์‡ผํ•‘๋ชฐ ์‚ฌ์ดํŠธ๋ฅผ ์šด์˜ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž.


๊ทธ๋ฆฌ๊ณ  usertb1์—๋Š” ์‚ฌ์šฉ์ž ์ •๋ณด๊ฐ€ ๋‹ด๊ฒจ์žˆ๊ณ  buytb1์—๋Š” ๊ตฌ๋งค ์ •๋ณด๊ฐ€ ๋‹ด๊ฒจ์žˆ๋‹ค๊ณ  ํ•ด๋ณด์ž.

๋งŒ์•ฝ ์ƒ˜ํ”Œ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋‹ค๊ฑฐ๋‚˜, usertb1๊ณผ buytb1์— ๋Œ€ํ•ด์„œ ๋ชจ๋ฅธ๋‹ค๋ฉด, ์ƒ˜ํ”Œ ๋ฐ์ดํ„ฐ ๋ฐ ์ฟผ๋ฆฌ๋ฌธ์— ๊ฐ€์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

์šฐ๋ฆฌ๋Š” ์‚ฌ์šฉ์ž๋“ค์ด ์ฃผ๋ฌธํ•œ ์ฃผ๋ฌธ ๋ชฉ๋ก์„ ํ† ๋Œ€๋กœ ๋ฐฐ์†ก์„ ํ•ด์ฃผ๋ ค ํ•œ๋‹ค.


์šฐ์„  ๋ˆ„๊ฐ€ ๋ฌด์Šจ ์ƒํ’ˆ์„ ๊ตฌ๋งคํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ์ž๊ฐ€ ๊ตฌ๋งคํ•œ ๋ชจ๋“  ๊ฒƒ์„ ์ถœ๋ ฅํ•ด๋ณด์ž.

SELECT *
FROM buytb1;

์ž! ์ด์ œ ๋ฐฐ์†ก์„ ํ•ด์•ผ ํ•œ๋‹ค.

 

๋ฐฐ์†ก์„ ํ•˜๊ธด ํ•ด์•ผ๋˜๋Š”๋ฐ ์šฐ๋ฆฌ๋Š” ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ์ •๋ณด๋ผ๊ณค userid๋ฐ–์— ๋ชจ๋ฅธ๋‹ค.

 

๊ทธ๋Ÿผ ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ? ๋ฐ”๋กœ JOIN์„ ์ด ๋–„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

INNER JOIN์€ INNER JOIN ์กฐ๊ฑด์— ํ•ด๋‹นํ•˜๋Š” ๋ชจ๋“  ์นผ๋Ÿผ์„ ๋ถ™์—ฌ ๊ฒฐ๊ณผ ํ…Œ์ด๋ธ”๋กœ ์ถœ๋ ฅ์‹œ์ผœ ์ค€๋‹ค.

INNER JOIN์˜ ๊ธฐ๋ณธ์ ์ธ ์‚ฌ์šฉ๋ฒ•

SELECT ์นผ๋Ÿผ
FROM ํ…Œ์ด๋ธ” 1 (๊ธฐ์ค€์ด ๋˜๋Š” ํ…Œ์ด๋ธ”)
  INNER JOIN ํ…Œ์ด๋ธ” 2
  ON ์กฐ์ธ๋  ์กฐ๊ฑด
[WHERE ๊ฒ€์ƒ‰ ์กฐ๊ฑด]
[GROUP BY]
[HAVING]
[ORDER BY]

์—ฌ๊ธฐ์„œ ์กฐ์ธ๋  ์กฐ๊ฑด์€ buytb1์— ์žˆ๋Š” userid์™€ usertb1์— ์žˆ๋Š” userid๊ฐ€ ๊ฐ™์€ ๊ฒƒ๋“ค๋งŒ JOIN ํ•œ๋‹ค.

 

์šฐ๋ฆฌ๋Š” ์‚ฌ์šฉ์ž ์ด๋ฆ„์œผ๋กœ JOIN์„ ํ•˜๊ณ  ์žˆ์œผ๋‹ˆ ON์— ๋Œ€ํ•œ ์กฐ๊ฑด์€ buytb1.userid = usertb1.userid ์ด๋‹ค.

SELECT *
FROM buytb1
  INNER JOIN usertb1
  ON buytb1.userid = usertb1.userid;

๊ทธ๋Ÿผ ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ๊ฐœ์˜ ํ…Œ์ด๋ธ”์—์„œ ON์— ์ง€์ •๋œ ์กฐ๊ฑด์— ๋ถ€ํ•ฉํ•˜๋Š” ์นผ๋Ÿฝ๋“ค๋งŒ ๋ฌถ์–ด์„œ ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

์šฐ๋ฆฌ๋Š” ๋ชจ๋“  ์นผ๋Ÿผ์„ ์ถœ๋ ฅํ–ˆ๋Š”๋ฐ, ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” userid, name, price๋งŒ ์ถœ๋ ฅํ•ด๋ณด๋„๋ก ํ•˜์ž.

SELECT userid, name, price
FROM buytb1
  INNER JOIN usertb1
  ON buytb1.userid = usertb1.userid;

๊ทธ๋Ÿผ Column์˜ userid๊ฐ€ ์• ๋งค (ambigous) ํ•˜๋‹ค๊ณ  ๋‚˜์˜จ๋‹ค.

 

์ด์œ ๊ฐ€ ๋ญ˜๊นŒ?

๋ฐ”๋กœ ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ๊ฐœ์˜ ํ…Œ์ด๋ธ”์— ์กด์žฌํ•˜๋Š” userid ์ค‘์— ์–ด๋–ค userid๋ฅผ ์ถœ๋ ฅํ•ด์•ผํ• ์ง€ ๋ชฐ๋ผ์„œ์ด๋‹ค.

 

์ด๋ ‡๊ฒŒ JOIN์„ ์‚ฌ์šฉํ•  ๋•Œ ์งˆ์˜ํ•˜๊ณ ์ž ํ•˜๋Š” ๋Œ€์ƒ๊ณผ ๋ชฉํ‘œ๋ฅผ ์ •ํ™•ํžˆ ํ•ด์•ผํ•œ๋‹ค.

 

๊ทธ๋ž˜์„œ ์œ„์˜ ์˜ค๋ฅ˜๋ฅผ ๊ณ ์น˜๋ ค๋ฉด ์–ด๋–ค ํ…Œ์ด๋ธ”์— ์žˆ๋Š” ์นผ๋Ÿผ์ด ํ•„์š”ํ•œ์ง€ usertb1.userid ์™€ ๊ฐ™์ด ์ง์ ‘ ํ…Œ์ด๋ธ”์„ ๋ช…์‹œํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

ํ•˜์ง€๋งŒ ํ…Œ์ด๋ธ” ์ด๋ฆ„์ด ๋งŒ์•ฝ customer_service_roll_payment ๋ผ๋Š” ํ…Œ์ด๋ธ”์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž.

 

๊ทธ๋ฆฌ๊ณ  ๊ทธ ํ…Œ์ด๋ธ”์—์„œ last_payment_date ๋ผ๋Š” ์นผ๋Ÿผ์„ ์ง€์ •ํ•  ๋•Œ๋Š” customer_service_roll_payment.last_payment_date ๋ผ๊ณ  ์ง€์ •ํ•ด์•ผํ•œ๋‹ค.

 

๊ทธ๋Ÿผ ๋„ˆ๋ฌด ๋ณด๊ธฐ ํž˜๋“œ๋‹ˆ ์•„๋ž˜์˜ ์ฟผ๋ฆฌ๋ฌธ๊ณผ ๊ฐ™์ด ๋ณ„๋ช…์„ ์ด์šฉํ•ด์„œ ์งง๊ฒŒ ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

SELECT B.userid, U.name, B.price
FROM buytb1 B
  INNER JOIN usertb1 U
  ON B.userid = U.userid;

JOIN์—์„œ WHERE๋กœ ์กฐ๊ฑด ๊ฑธ๊ธฐ

JOIN๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์กฐ๊ฑด์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์šฐ๋ฆฌ๊ฐ€ ๋งŒ์•ฝ ์•ž์„œ ์งˆ์˜ํ•œ ์ฟผ๋ฆฌ๋ฌธ์—์„œ ์ •๋ ฌ๋กœ ์ถœ๋ ฅํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์—ญ์‹œ ORDER BY๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋˜ํ•œ ์ด๋ฆ„์ด ์ด์Šน๊ธฐ์ธ ์‚ฌ์šฉ์ž๋งŒ ์ถœ๋ ฅํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด WHERE์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

SELECT B.userid, U.name, B.price
FROM buytb1 B
  INNER JOIN usertb1 U
  ON B.userid = U.userid
WHERE U.name = '์ด์Šน๊ธฐ'
ORDER BY B.price;

OUTER JOIN

์šฐ๋ฆฌ๊ฐ€ ๋ฐฉ๊ธˆ ์œ„์—์„œ ๋ฐฐ์šด JOIN ์ฆ‰ INNER JOIN ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ๊ต์ง‘ํ•ฉ์ ์ธ ์„ฑ๊ฒฉ์„ ๋„๊ณ  ์žˆ๋‹ค.


ํ•˜์ง€๋งŒ ์ง€๊ธˆ ๋ฐฐ์šธ LEFT JOIN์€ ํ•ฉ์ง‘ํ•ฉ์ ์ธ ์„ฑ๊ฒฉ์„ ๋ˆ๋‹ค.

 

OUTER JOIN ์˜ ๊ธฐ๋ณธ์ ์ธ ์ปจ์…‰์€ ๊ณตํ†ต๋œ INNER JOIN ์˜์—ญ์„ ํฌํ•จํ•ด ๋‹ค๋ฅธ ํ•œ์ชฝ ํ…Œ์ด๋ธ”์˜ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•˜๋Š” ์กฐ์ธ์ธ๋ฐ, ์ข€ ์‰ฝ๊ฒŒ ๋ง ํ•˜์ž๋ฉด

 

ON ์กฐ๊ฑด์— ๋งŒ์กฑ๋˜์ง€ ์•Š๋Š” ์นผ๋Ÿผ ๊นŒ์ง€๋„ ํฌํ•จ์‹œ์ผœ์„œ ํ…Œ์ด๋ธ”์„ JOINํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ด๋Ÿฐ OUTER JOIN์—๋Š” ํฌ๊ฒŒ 3๊ฐ€์ง€ ์ข…๋ฅ˜๊ฐ€ ์กด์žฌํ•œ๋‹ค.

  1. LEFT OUTER JOIN
  2. RIGHT OUTER JOIN
  3. FULL OUTER JOIN

๊ธฐ๋ณธ์ ์ธ OUTER JOIN ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

 

OUTER JOIN๋„ INNER JOIN ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์‚ฌ์šฉ๋ฒ•์€ ๋™์ผํ•˜๋‹ค.

SELECT ์นผ๋Ÿผ
FROM ํ…Œ์ด๋ธ” 1 (๊ธฐ์ค€์ด ๋˜๋Š” ํ…Œ์ด๋ธ” LEFT)
  <LEFT | RIGHT | FULL> JOIN ํ…Œ์ด๋ธ” 2 (RIGHT)
  ON ์กฐ์ธ๋  ์กฐ๊ฑด
[WHERE ๊ฒ€์ƒ‰ ์กฐ๊ฑด]
[GROUP BY]
[HAVING]
[ORDER BY]

์‚ฌ์‹ค์ƒ LEFT ์กฐ์ธ์ด๋‚˜ RIGHT ์กฐ์ธ์€ ๋Œ€์ƒ ํ…Œ์ด๋ธ”์ด ์–ด๋””๋ƒ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง„๋‹ค.

 

์ฆ‰,

SELECT *
FROM buytb1 B
  RIGHT OUTER JOIN usertb1 U
  ON B.userid = U.userid;

SELECT *
FROM usertb1 U
  LEFT OUTER JOIN buytb1 B
  ON B.userid = U.userid;

์€ ์„œ๋กœ ๊ฐ™์€ JOIN์„ ํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

 

๊ทธ๋Ÿผ ์–ด๋–ค ํ˜•ํƒœ์˜ ๋ฌธ์ œ๋กœ ์ถœ์ œ๋ ๊นŒ?

 

์ „์ฒด ํšŒ์›์˜ ๊ตฌ๋งค ๊ธฐ๋ก์„ ์ถœ๋ ฅํ•˜๋˜, ๊ตฌ๋งค ๊ธฐ๋ก์ด ์—†๋Š” ํšŒ์›๋„ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค ๋ผ๋Š” ๋ฌธ์ œ๊ฐ™์ด ํŠน์ • ์กฐ๊ฑด์— ๋งŒ์กฑํ•˜์ง€ ์•Š๋Š” ํ…Œ์ด๋ธ” ๊นŒ์ง€ ์ถœ๋ ฅํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.

 

๊ทธ๋Ÿผ ์œ„์˜ ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋‹ต์„ ์ฟผ๋ฆฌ๋ฌธ์œผ๋กœ ๊ตฌ์„ฑํ•ด๋ณด์ž.

SELECT *
FROM usertb1 U
  LEFT OUTER JOIN buytb1 B
  ON B.userid = U.userid;

๊ทธ๋Ÿผ ๊ตฌ๋งค ์ด๋ ฅ์ด ์—†๋Š” ํšŒ์›๋“ค์˜ price ์นผ๋Ÿผ์€ NULL๋กœ ์ฒ˜๋ฆฌ๋˜์–ด ์ถœ๋ ฅ๋œ๋‹ค.


์นดํ…Œ๊ณ ๋ฆฌ ์ดˆ๋ณด์ž๋„ ์ค€๋น„ํ•˜๋Š” SQL ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ์— ๊ฐ€์‹œ๋ฉด ํ•ด๋‹น ์‹œ๋ฆฌ์ฆˆ๋ฅผ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋Œ“๊ธ€