๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป Computer Science/๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

[๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค] ์„ฑ๋Šฅ ๊ด€์ ์—์„œ ๋ณธ JOIN (์†๋„ ๊ฐœ์„ )

by Jay Din 2023. 12. 19.
728x90
๋ฐ˜์‘ํ˜•

์•ž์˜ ํฌ์ŠคํŒ…์—์„œ JOIN์„ ํ•˜๋Š” ์ด์œ ์™€ SQL ์ฟผ๋ฆฌ ์‹คํ–‰ ์ˆœ์„œ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค.

JOIN ์ˆœ์„œ์˜ ์ค‘์š”์„ฑ์€ ์ฟผ๋ฆฌ ์ตœ์ ํ™”์™€ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

JOIN ์ˆœ์„œ์˜ ์ค‘์š”์„ฑ

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ ์–ด๋–ค ํ…Œ์ด๋ธ”์„ ๋จผ์ € ์ฝ๊ณ  ์กฐ์ธํ• ์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š”๋ฐ ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค.

JOIN ์ˆœ์„œ๋ฅผ ์ตœ์ ํ™”ํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—”์ง„์ด ๋” ํšจ์œจ์ ์ธ ์‹คํ–‰ ๊ณ„ํš์„ ์ˆ˜๋ฆฝํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋Š” ์ „์ฒด์ ์ธ ์ฟผ๋ฆฌ ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค.

 

๋‹จ์ˆœ JOIN ์˜ˆ์‹œ

๊ฐ„๋‹จํ•œ ์˜ˆ์‹œ๋ฅผ ํ†ตํ•ด ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋‘ ๊ฐœ์˜ ํ…Œ์ด๋ธ” A์™€ B๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

A ํ…Œ์ด๋ธ”์€ 100๊ฐœ์˜ ํ–‰์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ  B ํ…Œ์ด๋ธ”์€ 100,000๊ฐœ์˜ ํ–‰์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

๋‘ ํƒ€์ด๋ธ”์€ ๊ณตํ†ต๋œ ์ปฌ๋Ÿฐ์ธ `id`๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์กฐ์ธ๋ฉ๋‹ˆ๋‹ค.

 

SELECT *
FROM A
INNER JOIN B ON A.id = B.id;

 

  1. B ํ…Œ์ด๋ธ”์„ ๋จผ์ € ์ฝ๋Š” ๊ฒฝ์šฐ:
    • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ B ํ…Œ์ด๋ธ”์„ ๋จผ์ € ์ฝ๊ณ  ๊ทธ ๊ฒฐ๊ณผ์— A ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•  ๊ฒฝ์šฐ, B ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ ๋•Œ๋ฌธ์— ๋งŽ์€ ์กฐ์ธ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ํ–‰์ด ์กด์žฌํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
    • ์ด ๊ฒฝ์šฐ, ์˜ตํ‹ฐ๋งˆ์ด์ €๋Š” ์ ์€ ์ˆ˜์˜ A ํ…Œ์ด๋ธ” ํ–‰์„ ๊ฐ€์ ธ์™€ B ํ…Œ์ด๋ธ”๊ณผ ์กฐ์ธํ•˜๋ฉด์„œ ๋” ํšจ์œจ์ ์ธ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. A ํ…Œ์ด๋ธ”์„ ๋จผ์ € ์ฝ๋Š” ๊ฒฝ์šฐ:
    • ๋ฐ˜๋Œ€๋กœ, A ํ…Œ์ด๋ธ”์„ ๋จผ์ € ์ฝ๊ณ  ๊ทธ ๊ฒฐ๊ณผ์— B ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•  ๊ฒฝ์šฐ, A ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ๊ฐ€ ์ž‘๊ธฐ ๋•Œ๋ฌธ์— ์ดˆ๊ธฐ์— ์ ์€ ์ˆ˜์˜ ์กฐ์ธ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ํ–‰์„ ๊ฐ€์ ธ์˜ฌ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
    • ์ด ๊ฒฝ์šฐ, B ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ๊ฐ€ ํฌ๋”๋ผ๋„ ์ฒ˜์Œ์— ๊ฐ€์ ธ์˜ค๋Š” ํ–‰์ด ์ ๊ธฐ ๋•Œ๋ฌธ์— ์ „์ฒด์ ์œผ๋กœ ๋น ๋ฅธ ์„ฑ๋Šฅ์„ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ, ์–ด๋–ค ํ…Œ์ด๋ธ”์„ ๋จผ์ € ์ฝ์„์ง€์— ๋”ฐ๋ผ ์กฐ์ธ ์—ฐ์‚ฐ์˜ ํšจ์œจ์„ฑ์ด ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์˜ตํ‹ฐ๋งˆ์ด์ €๋Š” ์ด๋Ÿฌํ•œ ์กฐ๊ฑด์„ ๊ณ ๋ คํ•˜์—ฌ ์ตœ์ ์˜ ์‹คํ–‰ ๊ณ„ํš์„ ์ˆ˜๋ฆฝํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•˜์ง€๋งŒ, ๋•Œ๋กœ๋Š” ์ฟผ๋ฆฌ๋ฅผ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ช…์‹œ์ ์œผ๋กœ JOIN ์ˆœ์„œ๋ฅผ ์ง€์ •ํ•˜๋Š” ๊ฒƒ๋„ ๊ณ ๋ คํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

 

3๊ฐœ ์ด์ƒ์˜ JOIN ์˜ˆ์‹œ

JOIN์„ ์—ฌ๋Ÿฌ ๊ฐœ ์‚ฌ์šฉํ•˜๋Š” ์ฟผ๋ฆฌ์—์„œ JOIN ์ˆœ์„œ๋Š” ์„ฑ๋Šฅ์— ํฐ ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์‹œ๋กœ๋Š” ์„ธ ๊ฐœ์˜ ํ…Œ์ด๋ธ” A, B, C๋ฅผ ํ†ตํ•ด JOIN ์ˆœ์„œ์˜ ์ค‘์š”์„ฑ์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

SELECT *
FROM A
JOIN B ON A.id = B.id
JOIN C ON B.id = C.id;

 

728x90

 

  1. A, B, C ํ…Œ์ด๋ธ” ํฌ๊ธฐ:
    • A ํ…Œ์ด๋ธ”: 1,000 rows
    • B ํ…Œ์ด๋ธ”: 100,000 rows
    • C ํ…Œ์ด๋ธ”: 10 rows
  2. ๊ฐ€๋Šฅํ•œ JOIN ์ˆœ์„œ:
    • A ํ…Œ์ด๋ธ”์„ ๋จผ์ € ์ฝ๊ณ  B ํ…Œ์ด๋ธ”๊ณผ ์กฐ์ธํ•œ ํ›„, ๊ทธ ๊ฒฐ๊ณผ์— C ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•  ์ˆ˜ ์žˆ์Œ.
    • B ํ…Œ์ด๋ธ”์„ ๋จผ์ € ์ฝ๊ณ  C ํ…Œ์ด๋ธ”๊ณผ ์กฐ์ธํ•œ ํ›„, ๊ทธ ๊ฒฐ๊ณผ์— A ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•  ์ˆ˜ ์žˆ์Œ.
    • C ํ…Œ์ด๋ธ”์„ ๋จผ์ € ์ฝ๊ณ  A ํ…Œ์ด๋ธ”๊ณผ ์กฐ์ธํ•œ ํ›„, ๊ทธ ๊ฒฐ๊ณผ์— B ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•  ์ˆ˜ ์žˆ์Œ.
  3. JOIN ์ˆœ์„œ์— ๋”ฐ๋ฅธ ์˜ํ–ฅ:
    • A ํ…Œ์ด๋ธ”์„ ๋จผ์ € ์ฝ๋Š” ๊ฒฝ์šฐ:
      • A ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ๊ฐ€ ์ž‘์œผ๋ฏ€๋กœ ๋จผ์ € ์ฝ์œผ๋ฉด์„œ ์ ์€ ์ˆ˜์˜ ํ–‰์„ ๊ฐ€์ ธ์˜ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
      • ๊ทธ ํ›„ B ํ…Œ์ด๋ธ”๊ณผ ์กฐ์ธํ•˜๋ฉด์„œ ๋” ํฐ ๊ฒฐ๊ณผ ์ง‘ํ•ฉ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
      • ์ตœ์ข…์ ์œผ๋กœ C ํ…Œ์ด๋ธ”๊ณผ ์กฐ์ธํ•˜๋ฉด์„œ ๊ฒฐ๊ณผ๋ฅผ ์ถ•์†Œํ•ฉ๋‹ˆ๋‹ค.
      • ์—ฌ๋Ÿฌ JOIN ์ค‘์— ๊ฐ€์žฅ ํฐ B ํ…Œ์ด๋ธ”๊ณผ ์กฐ์ธํ•  ๋•Œ์— ํšจ๊ณผ์ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • B ํ…Œ์ด๋ธ”์„ ๋จผ์ € ์ฝ๋Š” ๊ฒฝ์šฐ:
      • B ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ๊ฐ€ ํฌ๊ธฐ ๋•Œ๋ฌธ์— ๋งŽ์€ ํ–‰์ด ํฌํ•จ๋œ ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
      • ๊ทธ ํ›„ C ํ…Œ์ด๋ธ”๊ณผ ์กฐ์ธํ•˜๋ฉด์„œ ๊ฒฐ๊ณผ๋ฅผ ์ถ•์†Œํ•ฉ๋‹ˆ๋‹ค.
      • ๋งˆ์ง€๋ง‰์œผ๋กœ A ํ…Œ์ด๋ธ”๊ณผ ์กฐ์ธํ•˜๋ฉด์„œ ์ตœ์ข… ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
      • A ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ๊ฐ€ ์ž‘๋”๋ผ๋„ B ํ…Œ์ด๋ธ”์ด ํฌ๊ธฐ ๋•Œ๋ฌธ์— ๋ถˆํ•„์š”ํ•œ ์กฐ์ธ์ด ๋งŽ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • C ํ…Œ์ด๋ธ”์„ ๋จผ์ € ์ฝ๋Š” ๊ฒฝ์šฐ:
      • C ํ…Œ์ด๋ธ”์€ ๋งค์šฐ ์ž‘๊ธฐ ๋•Œ๋ฌธ์— ๋จผ์ € ์ฝ์–ด๋„ ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.
      • ๊ทธ ํ›„ A ํ…Œ์ด๋ธ”๊ณผ ์กฐ์ธํ•˜๋ฉด์„œ ๊ฒฐ๊ณผ๋ฅผ ํ™•์žฅํ•ฉ๋‹ˆ๋‹ค.
      • ๋งˆ์ง€๋ง‰์œผ๋กœ B ํ…Œ์ด๋ธ”๊ณผ ์กฐ์ธํ•˜๋ฉด์„œ ์ตœ์ข… ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
      • C ํ…Œ์ด๋ธ”์ด ์ž‘์€ ๊ฒฝ์šฐ์—๋Š” ์ด ๋ฐฉ๋ฒ•์ด ํšจ๊ณผ์ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ตœ์ ์˜ ์กฐ์ธ ์ˆœ์„œ ์„ ํƒ

์ฃผ์–ด์ง„ ํ…Œ์ด๋ธ” ํฌ๊ธฐ๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ์ตœ์ ์˜ JOIN ์ฟผ๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ…Œ์ด๋ธ” ๊ฐ„์˜ ์กฐ์ธ ์ˆœ์„œ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ์™€ ๋ฐ์ดํ„ฐ ๋ถ„ํฌ๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ํšจ์œจ์ ์ธ ์กฐ์ธ ์ˆœ์„œ๋ฅผ ์ฐพ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

๊ฐ€์žฅ ํฐ ํ…Œ์ด๋ธ” B์™€ ๊ฐ€์žฅ ์ž‘์€ ํ…Œ์ด๋ธ” C๋ฅผ ๋จผ์ € ์กฐ์ธํ•˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ์— A ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•˜๋Š” ๊ฒƒ์ด ํšจ์œจ์ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Š” B ํ…Œ์ด๋ธ”์ด ํฌ๊ธฐ๊ฐ€ ํฌ๊ณ , C ํ…Œ์ด๋ธ”์ด ์ž‘๊ธฐ ๋•Œ๋ฌธ์— C ํ…Œ์ด๋ธ”์„ ๋จผ์ € ์ฝ๊ณ  ์กฐ์ธํ•˜๋ฉด ๋น„๊ต์  ์ ์€ ์ˆ˜์˜ ํ–‰์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

 

SELECT *
FROM B
JOIN C ON B.id = C.id
JOIN A ON B.id = A.id;

 

์ด ์ฟผ๋ฆฌ์—์„œ๋Š” B ํ…Œ์ด๋ธ”์„ ๊ธฐ์ค€์œผ๋กœ C ํ…Œ์ด๋ธ”์„ ๋จผ์ € ์กฐ์ธํ•˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ์— A ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•ฉ๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ฒ˜์Œ์— B์™€ C์˜ ์ž‘์€ ๊ฒฐ๊ณผ ์ง‘ํ•ฉ์„ ์ƒ์„ฑํ•˜๊ณ , ๊ทธ ๋‹ค์Œ์— A์™€ ์กฐ์ธํ•˜๋ฏ€๋กœ ์ „์ฒด์ ์ธ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿฌ๋‚˜

ํ•ญ์ƒ ์ด๋ ‡๊ฒŒ ์ •ํ™•ํ•œ ์ˆœ์„œ๊ฐ€ ์ตœ์ ์ผ ๊ฒƒ์ด๋ผ๊ณ  ๊ฐ€์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์˜ตํ‹ฐ๋งˆ์ด์ €๋Š” ์ฟผ๋ฆฌ ์‹คํ–‰ ๊ณ„ํš์„ ์ˆ˜๋ฆฝํ•  ๋•Œ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์š”์†Œ๋ฅผ ๊ณ ๋ คํ•˜๋ฉฐ ์ตœ์ ์˜ ์‹คํ–‰ ์ˆœ์„œ๋ฅผ ์„ ํƒํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ํ…Œ์ด๋ธ” ํฌ๊ธฐ, ์ธ๋ฑ์Šค, ํ†ต๊ณ„ ์ •๋ณด ๋“ฑ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ ์ตœ์ ์˜ ์ˆœ์„œ๋ฅผ ๊ฒฐ์ •ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

 

728x90
๋ฐ˜์‘ํ˜•