[CS-Database]์กฐ์ธ(Join)

์ง€์˜ยท2023๋…„ 6์›” 21์ผ
0

CS

๋ชฉ๋ก ๋ณด๊ธฐ
26/77

๐Ÿ“ ์กฐ์ธ์„ ์•Œ๊ธฐ์ „์— ๊ธฐ๋ณธ์ง€์‹์— ๋Œ€ํ•ด์„œ ๊ฐ„๋‹จํžˆ ์•Œ์•„๋ณด๊ณ  ๊ฐ€๊ฒ ์Šต๋‹ˆ๋‹ค.

ํ›„๋ณดํ‚ค๊ธฐ๋ณธํ‚ค๋Œ€์ฒดํ‚ค์Šˆํผํ‚ค์™ธ๋ž˜ํ‚ค
์œ ์ผ์„ฑ, ์ตœ์†Œ์„ฑ ๋งŒ์กฑ , ๊ฐ ํ•ด์„ ์œ ์ผํ•˜๊ฒŒ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ์†Œํ•œ์˜ ์†์„ฑ๋“ค์˜ ์ง‘ํ•ฉ (๊ธฐ๋ณธํ‚ค๊ฐ€ ๋  ์ˆ˜ ์žˆ๋Š” ํ›„๋ณด๋“ค)์œ ์ผ์„ฑ, ์ตœ์†ก์„ฑ ๋งŒ์กฑ, ํ›„๋ณดํ‚ค๋“ค ์ค‘์—์„œ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•œ ํ‚ค. null๊ฐ’์€ ์ ˆ๋Œ€ ๊ฐ€์งˆ ์ˆ˜ ์—†๊ณ , ์ค‘๋ณต๋œ ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์—†๋‹ค.๊ธฐ๋ณธํ‚ค๋กœ ์„ ์ •๋˜์ง€ ์•Š์€ ํ›„๋ณดํ‚ค์œ ์ผ์„ฑ๋งŒ ๋งŒ์กฑ. ๊ฐ ํ–‰์„ ์œ ์ผํ•˜๊ฒŒ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ํ•˜๋‚˜ ๋˜๋Š” ๊ทธ ์ด์ƒ์˜ ์†์„ฑ๋“ค์˜ ์ง‘ํ•ฉ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐธ์กฐํ•  ๋•Œ ์—†๋Š” ๊ฐ’์„ ์ฐธ์กฐํ•  ์ˆ˜ ์—†๋„๋ก ์ œ์•ฝ์„ ์ฃผ๋Š” ๊ฒƒ. ํ•ด๋‹น ํ‚ค๋Š” ์ฐธ์กฐ๋  ํ…Œ์ด๋ธ”์—์„œ ๊ธฐ๋ณธํ‚ค๋กœ ์„ค์ •๋˜์–ด ์žˆ์–ด์•ผ ํ•จ

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค : ์ผ์ •ํ•œ ๊ทœ์น™์œผ๋กœ ๊ตฌ์กฐํ™”๋˜์–ด ์ €์žฅํ•œ ๋ฐ์ดํ„ฐ์˜ ๋ชจ์Œ. ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ œ์–ด, ๊ด€๋ฆฌํ•˜๋Š” ํ†ตํ•ฉ ์‹œ์Šคํ…œ์„ DBMS๋ผ๊ณ  ํ•œ๋‹ค.

์กฐ์ธ

1. ์ •์˜

๋‘ ๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”์ด๋‚˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์—ฐ๊ฒฐํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ•

2. ์›๋ฆฌ

1) ์ค‘์ฒฉ ๋ฃจํ”„ ์กฐ์ธ

  • for๋ฌธ๊ณผ ๊ฐ™์€ ์›๋ฆฌ๋กœ ์กฐ๊ฑด์— ๋งž๋Š” ์กฐ์ธ์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•
  • ๋žœ๋ค ์ ‘๊ทผ์— ๋Œ€ํ•œ ๋น„์šฉ์ด ๋งŽ์ด ๋“ค์–ด, ๋Œ€์šฉ๋Ÿ‰ ํ…Œ์ด๋ธ”์—์„œ๋Š” ํ•˜์ง€ ์•Š์Œ.
//์ฒซ ๋ฒˆ์žฌ ํ…Œ์ด๋ธŒ๋ ˆ์„œ ํ–‰์„ ํ•œ๋ฒˆ์— ํ•˜๋‚˜์”ฉ ์ฝ๊ณ  ๊ทธ ๋‹ค์Œ ํ…Œ์ด๋ธ”์—์„œ๋„ ํ–‰์„ ํ•˜๋‚˜์”ฉ ์ฝ์–ด ์กฐ๊ฑด์— ๋งž๋Š” ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฐพ์•™ ๊ฒฐ๊ด๊ฐ’์„ ๋ฐ˜ํ™˜ 
for each row in t1 matching reference key {
	for each row in t2 matching reference key {
    	if row satisfies jion conditions, send to client
        }
    }

2) ์ •๋ ฌ ๋ณ‘ํ•ฉ ์กฐ์ธ

  • ๊ฐ๊ฐ์˜ ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•  ํ•„๋“œ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ -> ์กฐ์ธ ์ž‘์—…

3) ํ•ด์‹œ ์กฐ์ธ

>	๋นŒ๋“œ๋‹จ๊ณ„ : ์ž…๋ ฅ ํ…Œ์ด๋ธ” ์ค‘ ํ•˜๋‚˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ๋‚ด ํ•ด์‹œ ํ…Œ์ด๋ธ”์„ ๋นŒ๋“œํ•˜๋Š” ๋‹จ๊ณ„

>	ํ”„๋กœ๋ธŒ ๋‹จ๊ณ„ : ๋ ˆ์ฝ”๋“œ ์ฝ๊ธฐ ์‹œ์ž‘, ๊ฐ ๋ ˆ์ฝ”๋“œ์—์„œ 'Person.country_id"์— ์ผ์น˜ํ•˜๋Š” ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฐพ์•„์„œ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ˜ํ™˜
  • ํ•ด์‹œ ํ…Œ์ด๋ธ”์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์กฐ์ธํ•˜๋Š” ๋ฐฉ๋ฒ•
  • ๋‘ ํ…Œ์ด๋ธ”์„ ๋ชจ๋‘ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ฆฌ ์ˆ˜ ์žˆ์„ ๋•Œ ์‚ฌ์šฉํ•จ

3. ์ข…๋ฅ˜

1) INNER JOIN


A, B ํ…Œ์ด๋ธ”์˜ ๊ต์ง‘ํ•ฉ, ์ค‘๋ณต๋œ ๊ฐ’์„ ๋ณด์—ฌ์ค€๋‹ค.

SELECT 
A.NAME, B.AGE
FROM EX_TABLE A
INNER JOIN JOIN_TABLE B ON A.NO_EMP = B.NO_EMP

2) LEFT OUTER JOIN


Aํ…Œ์ด๋ธ”์˜ ๊ฐ’๊ณผ ์ค‘๋ณต๋œ ๊ฐ’๋„ ํฌํ•จํ•˜์—ฌ ๋ณด์—ฌ์ค€๋‹ค. (๊ทธ๋ƒฅ A ํ…Œ์ด๋ธ” ์ž์ฒด), A๋ฅผ ๊ธฐ์ค€์œผ๋กœ JOINํ•œ๋‹ค.

SELECT 
A.NAME, B.AGE
FROM EX_TABLE A
LEFT OUTER JOIN JOIN_TABLE B ON A.NO_EMP = B.NO_EMP

// RIGTHT OUTER JOIN๋„ ๋™์ผํ•œ ๋กœ์ง

3) FULL OUTER JOIN


ํ•ฉ์ง‘ํ•ฉ.
A,Bํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฒ€์ƒ‰๋จ.

SELECT 
A.NAME, B.AGE
FROM EX_TABLE A
FULL OUTER JOIN JOIN_TABLE B ON A.NO_EMP = B.NO_EMP

4) CROSS JOIN


๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ „๋ถ€ ๊ฒ€์ƒ‰๊ฐ€๋Šฅ.
3*4 = 12๊ฐœ์˜ ์ผ€์ด์Šค๋กœ ๊ฒ€์ƒ‰๋จ.

SELECT 
A.NAME, B.AGE
FROM EX_TABLE A
CROSS OUTER JOIN JOIN_TABLE B ON A.NO_EMP = B.NO_EMP

5) SELF JOIN


์ž๊ธฐ ์ž์‹ ๊ณผ ์ž์‹ ์„ ์กฐ์ธํ•˜๋Š” ๊ฒƒ
์ž์‹ ์ด ๊ฐ€์ง„ ์นผ๋Ÿผ์„ ๋‹ค์–‘ํ•˜๊ฒŒ ๋ณ€ํ˜•์‹œ์ผœ ํ™œ์šฉํ•  ๋•Œ ์œ ์šฉ

SELECT
A.NAME, B.AGE
FROM EX_TABLE A, EX_TABLE B
profile
๊พธ์ค€ํ•จ์˜ ํž˜์„ ์•„๋Š” ๊ฐœ๋ฐœ์ž๐Ÿ“

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