์ผ๋‹จ ํ•˜๊ณ  ๋ณด๋Š” ์‚ฌ๋žŒ

๋‚˜์ค‘๋ณด๋‹จ ์ง€๊ธˆ์— ์ง‘์ค‘ํ•˜๋˜, ์ง€๊ธˆ๋ณด๋‹จ ๋‚˜์ค‘์— ์™„๋ฒฝํ•ด์ง€์ž๐Ÿ’ช๐Ÿป

๐Ÿ—„๏ธData Base ์•„๋Š” ๊ฒƒ๋„ ๋‹ค์‹œ๋ณด์ž

[JOIN] RDBMS์˜ ๊ถ๊ทน์  ๋ชฉ์ 

JanginTech 2024. 8. 4. 23:10

1. JOIN

RDBMS๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ถ๊ทน์  ๋ชฉ์ 

 

INNER JOIN ๋‘ ํ…Œ์ด๋ธ”์˜ ๊ต์ง‘ํ•ฉ
LEFT/RIGHT (OUTER) JOIN 1๊ฐœ ํ…Œ์ด๋ธ”์—๋งŒ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์–ด๋„ ์กฐํšŒ ๋จ(๋ฐ˜๋Œ€ ํ…Œ์ด๋ธ”์€ NULL๋กœ ์ถœ๋ ฅ)
OUTER๋Š” ๋ถ™๋“  ์•ˆ ๋ถ™๋“  ๋˜‘๊ฐ™์Œ
FULL OUTER JOIN ์ „์ฒด ์ง‘ํ•ฉ

 

 

๊ฐ€๋ณ๊ฒŒ JOIN ์‹ค์Šตํ•ด ๋ณด์ž

 

INNER JOIN -1: ์ „๊ณต code๊ฐ€ ์ปดํ“จํ„ฐ๊ณตํ•™(COMENG)์ธ ์—ฌํ•™์ƒ ์ด๋ฆ„ ์ถœ๋ ฅ

JOIN = INNER JOIN(default)

 

 

INNER JOIN -2: ์— ๋น„ํ‹ฐ์•„์ด์— S๋‚˜ P๊ฐ€ ๋“ค์–ด๊ฐ„ ํ•™์ƒ ์ด๋ฆ„, ์ƒ๋…„์›”์ผ, ์— ๋น„ํ‹ฐ์•„์ด ์ถœ๋ ฅ

 

 

์—ฌ๊ธฐ๊นŒ์ง„ ๋„ˆ๋ฌด ๊ฐ„๋‹จํ•˜๋‹ค.

๋‹ค๋ฅธ ์Šคํ‚ค๋งˆ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋‹ค์–‘ํ•œ JOIN์„ ์‹ค์Šตํ•ด ๋ณด์ž.

 

 

LEFT (OUTER) JOIN -1: ํ•™์ƒ ์ค‘ ํ•˜๋‚˜์˜ ์ˆ˜๊ฐ•๊ณผ๋ชฉ๋„ ์„ ํƒํ•˜์ง€ ์•Š์€ ํ•™์ƒ ID์™€ ์ด๋ฆ„ ์กฐํšŒ

select s.student_id, s.student_name from student s
left join student_course sc on sc.student_id = s.student_id
where sc.course_id is null;

 

์—ฌ๊ธฐ์„œ๋Š” LEFT JOIN์„ ์‚ฌ์šฉํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

INNER JOIN์€ ๊ต์ง‘ํ•ฉ(๋‘˜ ๋‹ค ์ผ์น˜ํ•  ๋•Œ)๋งŒ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, is null์ด ๋จนํžˆ์งˆ ์•Š๋Š”๋‹ค.

LEFT JOIN์„ ์‚ฌ์šฉํ•ด์„œ student ํ…Œ์ด๋ธ” ๊ธฐ์ค€ ๋ชจ๋“  ๊ฐ’ + ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”์˜ ์ผ์น˜ํ•˜๋Š” ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋„๋ก ํ•œ๋‹ค.

 

LEFT (OUTER) JOIN -2: ํ•™์ƒ์˜ ์ด๋ฆ„, ์ˆ˜๊ฐ•ํ•œ ๊ณผ๋ชฉ๊ณผ ๊ต์ˆ˜ ์ด๋ฆ„ ์กฐํšŒ (๋‹จ, ๊ต์ˆ˜๊ฐ€ ๋ฐฐ์ •๋˜์ง€ ์•Š์€ ๊ณผ๋ชฉ๋„ ํฌํ•จ)

select s.student_name, c.course_name, p.professor_name from student s
left outer join student_course sc on sc.student_id = s.student_id
left outer join course c on sc.course_id = c.course_id
left outer join professor p on p.professor_id = c.professor_id;

 

ํ•™์ƒ ๊ณผ๋ชฉ ํ…Œ์ด๋ธ”๊ณผ์˜ ์กฐ์ธ โžก๏ธ ์ˆ˜๊ฐ•๊ณผ๋ชฉ์„ ์„ ํƒํ•˜์ง€ ์•Š์€ ๋ชจ๋“  ํ•™์ƒ์ด ๊ฒฐ๊ณผ์— ํฌํ•จ๋จ

๊ณผ๋ชฉ ํ…Œ์ด๋ธ”๊ณผ์˜ ์กฐ์ธ โžก๏ธ ๊ณผ๋ชฉ์— ๋“ฑ๋ก๋˜์ง€ ์•Š์€ ๋ชจ๋“  ๊ณผ๋ชฉ์ด ๊ฒฐ๊ณผ์— ํฌํ•จ๋จ(์‚ฌ์‹ค ๋ง์ด ์•ˆ ๋˜์ง€๋งŒ.. ๋…ผ๋ฆฌ์ ์œผ๋กœ ์ผ๊ด€์„ฑ..)

๊ต์ˆ˜ ํ…Œ์ด๋ธ”๊ณผ์˜ ์กฐ์ธ โžก๏ธ ๊ต์ˆ˜๊ฐ€ ๋ฐฐ์ •๋˜์ง€ ์•Š์€ ๊ณผ๋ชฉ๋„ ๊ฒฐ๊ณผ์— ํฌํ•จ ๋จ

 

๋…ผ๋ฆฌ์ ์œผ๋กœ ์ผ๊ด€์„ฑ์„ ๋งž์ถ”์–ด ํ•ด๋‹น ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

FULL OUTER JOIN -1: ๊ต์ˆ˜์™€ ๊ณผ๋ชฉ์˜ ์ „์ฒด ๋‚ด์—ญ ์กฐํšŒ (๋‹จ, ๊ต์ˆ˜ ์ค‘ ๊ฐ•์˜๋ฅผ ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜, ์•„์ง ๊ต์ˆ˜๊ฐ€ ๋ฐฐ์ •๋˜์ง€ ์•Š์€ ๊ณผ๋ชฉ๋„ ๋ชจ๋‘ ํฌํ•จํ•˜์—ฌ ์ถ”์ถœ)

select s.student_id, s.student_name from student s
left join student_course sc on sc.student_id = s.student_id
where sc.course_id is null;

 

๊ต์ˆ˜ ํ…Œ์ด๋ธ”๊ณผ ๊ณผ๋ชฉ ํ…Œ์ด๋ธ” ๋ชจ๋‘ ์„œ๋กœ์™€ ๊ด€๊ณ„์—†์ด ์ถ”์ถœํ•ด์•ผ ํ•˜๋ฏ€๋กœ FULL OUTER JOIN์„ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

 

 

 

โž•

ํ˜ผํ•ฉ ์‹ค์Šต 1 : ์ปดํ“จํ„ฐ๊ณตํ•™๊ณผ ์—ฌํ•™์ƒ ํ˜ˆ์•กํ˜•๋ณ„ ํ‰๊ท  ๋‚˜์ด๊ฐ€ 24์‚ด ๋ฏธ๋งŒ์ธ ํ˜ˆ์•กํ˜•๊ณผ ํ‰๊ท  ๋‚˜์ด๋ฅผ ์กฐํšŒ

 

1. ์ปดํ“จํ„ฐ๊ณตํ•™๊ณผ ์—ฌํ•™์ƒ ๊ตฌํ•˜๊ธฐ

SELECT *
FROM tst_stdntinfo_m s
JOIN tst_stdntdptmt_i d ON s.stnb = d.stnb
WHERE s.stdntgndr_typ = 'F'
AND d.dptmt_cd = 'COMENG'

์ปดํ“จํ„ฐ๊ณตํ•™๊ณผ ์—ฌํ•™์ƒ์˜ ๋ชจ๋“  ์ •๋ณด๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.

 

 

2. ํ˜ˆ์•กํ˜•๋ณ„ ์ปดํ“จํ„ฐ๊ณตํ•™๊ณผ ์—ฌํ•™์ƒ ๊ตฌํ•˜๊ธฐ(?)

SELECT s.STDNTBLD_TYP
FROM tst_stdntinfo_m s
JOIN tst_stdntdptmt_i d ON s.stnb = d.stnb
WHERE s.STDNTGNDR_TYP = 'F'
AND d.dptmt_cd = 'COMENG'
GROUP BY s.stdntbld_typ

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ˜ˆ์•กํ˜• 4๊ฐœ๊ฐ€ ๊ฐ๊ฐ ์ถœ๋ ฅ๋œ๋‹ค.

 

 

3. [๊ฒฐ๊ณผ] ํ˜ˆ์•กํ˜•๋ณ„ ํ‰๊ท ๋‚˜์ด๊ฐ€ 24์‚ด ๋ฏธ๋งŒ์ธ ํ˜ˆ์•กํ˜•๊ณผ ํ‰๊ท  ๋‚˜์ด๋ฅผ ์กฐํšŒ

SELECT s.STDNTBLD_TYP, AVG(YEAR(curdate()) - YEAR(s.stdntbth_day)) as avg_age
FROM tst_stdntinfo_m s
JOIN tst_stdntdptmt_i d ON s.stnb = d.stnb
WHERE s.STDNTGNDR_TYP = 'F'
AND d.dptmt_cd = 'COMENG'
GROUP BY s.stdntbld_typ
HAVING avg_age < 24;

 

๋‚˜์ด๋Š” ํ˜„์žฌ YEAR์—์„œ ํƒœ์–ด๋‚œ ๋…„๋„๋ฅผ ๋นผ์ฃผ๋ฉด ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

curdate()๋Š” ํ˜„์žฌ ๋…„๋„๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋‹ค.

 

ํ˜ˆ์•กํ˜•๋ณ„ ์กฐํšŒ์ด๋ฏ€๋กœ group by s.stdntbld_typ์„ ํ•ด์ฃผ๊ณ , 

group by์ ˆ ์กฐ๊ฑด์œผ๋กœ ํ‰๊ท  ๋‚˜์ด ์ œ์•ฝ์ด ์žˆ์—ˆ์œผ๋‹ˆ ์ด๋ฅผ having์ ˆ์— ์ถ”๊ฐ€ํ•ด ์ค€๋‹ค.

 

 

group by๋Š” ๋™์ผํ•œ ๊ฐ’์„ ๊ฐ€์ง„ ์ปฌ๋Ÿผ์„ ๊ธฐ์ค€์œผ๋กœ ๊ทธ๋ฃน๋ณ„ ์—ฐ์‚ฐ์„ ์ ์šฉํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ์ง‘๊ณ„ํ•จ์ˆ˜์™€ ํ•จ๊ป˜ ์ž์ฃผ ์‚ฌ์šฉ๋œ๋‹ค.

having์€ group by์ ˆ์˜ ๊ฐ’ ์ค‘ ์›ํ•˜๋Š” ์กฐ๊ฑด์„ ๊ฑธ๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

ํ˜ˆ์•กํ˜•๋ณ„ "ํ‰๊ท  ๋‚˜์ด๊ฐ€ 24์‚ด ๋ฏธ๋งŒ" >> ์ด ์กฐ๊ฑด์ด having์ ˆ์— ํฌํ•จ๋œ๋‹ค.