๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Database/Do it! SQL ์ž…๋ฌธ

[Do it! SQL ์ž…๋ฌธ] 04-1. ์กฐ์ธ

ํ…Œ์ด๋ธ”์„ 2๊ฐœ ์ด์ƒ ์กฐ์ธํ•œ๋‹ค๋Š” ์˜๋ฏธ

  • ๋ถ„๋ฆฌ๋œ ๋‘ ๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”์—์„œ ์›ํ•˜๋Š” ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ ์กฐํ•ฉ์„ ๋งŒ๋“ค์–ด๋‚ด๋Š” ๊ฒƒ

 

๋‚ด๋ถ€ ์กฐ์ธ(INNER JOIN)

https://stackoverflow.com/questions/13997365/sql-joins-as-venn-diagram

  • ๋‚ด๋ถ€ ์กฐ์ธ์€ ์กฐ์ธํ‚ค์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ ํ…Œ์ด๋ธ”์˜ ์—ด๊ฐ’์„ ๋น„๊ตํ•ด ์กฐ๊ฑด์— ๋งž๋Š” ๊ฐ’์„ ๊ฒ€์ƒ‰ํ•œ๋‹ค.
SELECT [์—ด ์ด๋ฆ„]
FROM [ํ…Œ์ด๋ธ” 1]
INNER JOIN [ํ…Œ์ด๋ธ” 2] ON [ํ…Œ์ด๋ธ” 1.์—ด] = [ํ…Œ์ด๋ธ” 2.์—ด]
WHERE [๊ฒ€์ƒ‰ ์กฐ๊ฑด]

 

 

 

INNER JOIN ๋ฌธ ์‚ฌ์šฉํ•˜๊ธฐ (2๊ฐœ ํ…Œ์ด๋ธ” ์กฐ์ธ)

 

ON ๋ฌธ๊ณผ WHERE ๋ฌธ์˜ ์ฐจ์ด

  • ON: ์กฐ์ธํ•  ๋–„ ์กฐ์ธ ์กฐ๊ฑด์„ ์œ„ํ•ด ์‚ฌ์šฉ
  • WHERE: ์กฐ์ธ์„ ์™„๋ฃŒํ•œ ์ƒํƒœ์—์„œ ์กฐ๊ฑด์— ๋งž๋Š” ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๊ณ ์ž ์‚ฌ์šฉ
  • ON ๋ฌธ์— ์กฐ๊ฑด์„ ๋‹ค์–‘ํ•˜๊ฒŒ ๋ถ€์—ฌํ•ด WHERE ๋ฌธ๊ณผ ๊ฐ™์€ ํšจ๊ณผ๋ฅผ ๋‚ด๊ฒŒ ํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์กฐ์ธ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋ฐ์ดํ„ฐ ๋งค์นญ ๊ณผ์ •์—์„œ ์˜ค์ฐจ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ ๊ทธ๋ ‡๊ฒŒ ํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค. ๋ฐ˜๋“œ์‹œ ON ๋ฌธ๊ณผ WHERE ๋ฌธ์˜ ์„ฑ๊ฒฉ์„ ๋ถ„๋ฆฌํ•ด์„œ ์‚ฌ์šฉํ•˜์ž.

INNER JOIN ๋ฌธ ์‚ฌ์šฉํ•˜๊ธฐ (2๊ฐœ ์ด์ƒ์˜ ์กฐ๊ฑด ์ ์šฉ)

 

INNER JOIN ๋ฌธ ์‚ฌ์šฉํ•˜๊ธฐ (3๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ” ์กฐ์ธ)

 

 

์™ธ๋ถ€ ์กฐ์ธ (OUTER JOIN)

INNER JOIN์€ ๋‘ ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•ด ์กฐ์ธ ์กฐ๊ฑด์œผ๋กœ ์‚ฌ์šฉํ•œ ์—ด์— ์žˆ๋Š” ๊ฐ™์€ ๊ฐ’์„ ์กฐํ•ฉํ•ด ๊ฒ€์ƒ‰ํ•œ๋‹ค. 

๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์— ์žˆ๋Š” ํ–‰์—์„œ ์ผ์น˜ ํ•ญ๋ชฉ์ด ์•„๋‹Œ ํ–‰์„ ์กฐํ•ฉํ•ด ๊ฒ€์ƒ‰ํ•ด์•ผ ํ•  ๋•Œ๋Š” ์™ธ๋ถ€ ์กฐ์ธ(OUTER JOIN)์„ ์‚ฌ์šฉํ•œ๋‹ค.

 

์™ธ๋ถ€ ์กฐ์ธ์˜ ์ข…๋ฅ˜

  • LEFT OUTER JOIN
  • RIGHT OUTER JOIN
  • FULL OUTER JOIN

LEFT OUTER JOIN ์•Œ์•„๋ณด๊ธฐ

OUTER JOIN ๋ฌธ ์ขŒ์ธก์— A ํ…Œ์ด๋ธ”์ด ์žˆ๊ณ  ์šฐ์ธก์— B ํ…Œ์ด๋ธ”์ด ์žˆ๋Š” ๊ฒฝ์šฐ → ์ขŒ์ธก(A) ํ…Œ์ด๋ธ” ๊ธฐ์ค€์œผ๋กœ ์กฐ์ธํ•˜๊ณ  ์‹ถ์œผ๋ฉด LEFT OUTER JOIN

 

https://stackoverflow.com/questions/13997365/sql-joins-as-venn-diagram

 

 

 

์ขŒ์ธก์— ๊ณ ๊ฐ ํ…Œ์ด๋ธ”์ด ์žˆ๊ณ  ์šฐ์ธก์— ์ฃผ๋ฌธ ํ…Œ์ด๋ธ”์ด ์žˆ์„ ๋•Œ, ๊ณ ๊ฐ ํ…Œ์ด๋ธ” ๊ธฐ์ค€์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ(๊ณ ๊ฐ ํ…Œ์ด๋ธ”์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋Š” ๋‹ค ๋‚˜์˜ค๊ณ  ๊ทธ์— ๋งž๋Š” ์ฃผ๋ฌธ ๋ฐ์ดํ„ฐ๋Š” ์žˆ์œผ๋ฉด ๋‚˜์˜ค๊ณ  ์—†์œผ๋ฉด ์•ˆ ๋‚˜์˜ค๊ฒŒ๋”)

 

 

 

RIGHT OUTER JOIN ์•Œ์•„๋ณด๊ธฐ

LEFT OUTER JOIN๊ณผ ์›๋ฆฌ๋Š” ๊ฐ™๊ณ  ๋ฐฉํ–ฅ๋งŒ ๋‹ค๋ฅด๋‹ค.

 

https://stackoverflow.com/questions/13997365/sql-joins-as-venn-diagram

 

์šฐ์ธก์˜ ์ฃผ๋ฌธ ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค ๋ณด์—ฌ์ฃผ๊ณ  ์ขŒ์ธก์˜ ๊ณ ๊ฐ ํ…Œ์ด๋ธ”์€ ์กฐ์ธ ์กฐ๊ฑด์— ๋งž๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์„๋•Œ๋งŒ ๋ณด์—ฌ์ค€๋‹ค.

 

 

FULL OUTER JOIN ์•Œ์•„๋ณด๊ธฐ

FULL OUTER JOIN์€ LEFT OUTER JOIN๊ณผ RIGHT OUTER JOIN์„ ํ•ฉ์นœ ๊ฒƒ์ด๋‹ค. FULL OUTER JOIN ๊ฐ™์€ ๊ฒฝ์šฐ ์–‘์ชฝ ํ…Œ์ด๋ธ”์˜ ์ผ์น˜ํ•˜์ง€ ์•Š์€ ํ–‰๋„ ๋ชจ๋‘ ๊ฒ€์ƒ‰ํ•œ๋‹ค. ์ฆ‰, ์กฐ์ธ ์กฐ๊ฑด์— ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ํ•ญ๋ชฉ๊ณผ ์ผ์น˜ํ•˜๋Š” ํ•ญ๋ชฉ ๋ชจ๋‘๊ฐ€ ํ‘œ์‹œ๋œ๋‹ค.

 

 

 

๊ต์ฐจ ์กฐ์ธ (CROSS JOIN)

์ž์ฃผ ์‚ฌ์šฉํ•˜์ง€๋Š” ์•Š์ง€๋งŒ, ๊ฐ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์กฐํ•ฉํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•„์š”ํ•  ๊ฒฝ์šฐ ๊ต์ฐจ ์กฐ์ธ(CROSS JOIN)์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.(์นด๋ฅดํ…Œ์‹œ์•ˆ ๊ณฑ)

 

 

 

์…€ํ”„ ์กฐ์ธ

์ž๊ธฐ ์ž์‹ ์„ ์กฐ์ธ์— ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์…€ํ”„ ์กฐ์ธ์ด๋ผ๊ณ  ํ•œ๋‹ค.