Inner Join

์ œX ์ •๊ทœํ˜• ํ…Œ์ด๋ธ” ๋งŒ๋“œ๋Š” ๊ฒƒ ๊นŒ์ง€๋Š” ์ข‹์€๋ฐ

๊ทธ๊ฑฐํ•œ๋‹ค๊ณ  ํ…Œ์ด๋ธ”์„ ๋‹ค ์ชผ๊ฐœ๋†“์œผ๋ฉด ๋‚˜์ค‘์— ์ถœ๋ ฅ์€ ์–ด๋–ป๊ฒŒ ํ•  ๊ฒƒ์ž…๋‹ˆ๊นŒ.

SELECT์™€ JOIN๋ฌธ๋ฒ• ์ž˜ ์“ฐ๋ฉด ํ•ด๊ฒฐ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณ„๋กœ ๊ฑฑ์ •์€ ์•ˆํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค.

JOIN ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๋ ค๋ฉด ํ…Œ์ด๋ธ” ํ•ฉ์น˜๋Š” ๋ฐฉ๋ฒ•๋ถ€ํ„ฐ ์•Œ์•„์•ผํ•˜๋Š”๋ฐ ๊ทธ๊ฒƒ๋ถ€ํ„ฐ ์•Œ์•„๋ด…์‹œ๋‹ค.

๋‹ค๋ฅธ ํ…Œ์ด๋ธ” ์ปฌ๋Ÿผ๋„ ๊ฐ™์ด ์ถœ๋ ฅํ•˜๊ธฐ

์ง€๋‚œ์‹œ๊ฐ„์—์ด๋งŒ๋“ค์—ˆ๋˜ program ํ…Œ์ด๋ธ”๊ณผ์ด teacher ํ…Œ์ด๋ธ”์—์„œ ์œ„ ์ด๋ฏธ์ง€ ์ฒ˜๋Ÿผ ํ”„๋กœ๊ทธ๋žจ,๊ฐ€๊ฒฉ,๊ฐ•์‚ฌ,์ถœ์‹ ๋Œ€ํ•™๊นŒ์ง€ 4๊ฐœ์˜ ์ปฌ๋Ÿผ์„ ํ•œ ๋ฒˆ์— ์ถœ๋ ฅํ•˜๊ณ  ์‹ถ์œผ๋ฉด ์–ด๋–ป๊ฒŒ ์ฟผ๋ฆฌ๋ฌธ์„ ์ž‘์„ฑํ•ด์•ผ ํ• ๊นŒ?

SELECT FROM ๋ฌธ๋ฒ•์“ธ ๋•Œ 2๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”์„ ์ ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿผ ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”๋กœ ํ•ฉ์ณ์„œ ์ถœ๋ ฅํ•ด์ค๋‹ˆ๋‹ค. ์ปฌ๋Ÿผ๋„ ์ž์œ ๋กญ๊ฒŒ ์„ ํƒ๊ฐ€๋Šฅ

SELECT ํ”„๋กœ๊ทธ๋žจ, ๊ฐ€๊ฒฉ, ๊ฐ•์‚ฌ, ์ถœ์‹ ๋Œ€ํ•™
FROM program, teacher

SELECT *
FROM program, teacher

์ด๋Ÿฌ๋ฉด ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”๊ณผ ์ปฌ๋Ÿผ์„ ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”๋กœ ์ถœ๋ ฅํ•ด์ค๋‹ˆ๋‹ค.

(์ฐธ๊ณ ) ์ปฌ๋Ÿผ๋ช…์ด ๊ฒน์น  ์ˆ˜ ์žˆ์œผ๋‹ˆ

๋‹ฌ๋ž‘ ์ปฌ๋Ÿผ๋ช…๋Œ€์‹  ํ…Œ์ด๋ธ”๋ช….์ปฌ๋Ÿผ๋ช… ์ด๋ ‡๊ฒŒ ์ ์ฐ์–ด์„œ ์“ฐ๋Š”๊ฒŒ ๋” ์ข‹์€ ์Šต๊ด€์ž…๋‹ˆ๋‹ค.

๊ทผ๋ฐ ์‹คํ–‰ํ•ด๋ณด๋ฉด ๋ญ”๊ฐ€ ์ด์ƒํ•œ ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

ํ…Œ์ด๋ธ” 2๊ฐœ ์ด์ƒ ์ถœ๋ ฅ์‹œ WHERE ์กฐ๊ฑด์ด ์—†๋Š” ๊ฒฝ์šฐ

์ž๋™์œผ๋กœ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ํ–‰์˜ ์กฐํ•ฉ์„ ์ถœ๋ ฅํ•ด์ฃผ๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

ํ…Œ์ด๋ธ”A์˜ 1๋ฒˆ์งธ ํ–‰ + ํ…Œ์ด๋ธ”B์˜ 1๋ฒˆ์งธ ํ–‰

ํ…Œ์ด๋ธ”A์˜ 1๋ฒˆ์งธ ํ–‰ + ํ…Œ์ด๋ธ”B์˜ 2๋ฒˆ์งธ ํ–‰

ํ…Œ์ด๋ธ”A์˜ 1๋ฒˆ์งธ ํ–‰ + ํ…Œ์ด๋ธ”B์˜ 3๋ฒˆ์งธ ํ–‰

ํ…Œ์ด๋ธ”A์˜ 2๋ฒˆ์งธ ํ–‰ + ํ…Œ์ด๋ธ”B์˜ 1๋ฒˆ์งธ ํ–‰

...

์ด๋ ‡๊ฒŒ 1. ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์กฐํ•ฉ์„ ์‹œ๋„ํ•ด์„œ ํ–‰์„ ๊ตฌ์„ฑํ•œ ๋‹ค์Œ 2. ์ „๋ถ€ ์ถœ๋ ฅํ•ด์ค๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ํ…Œ์ด๋ธ”์˜ ํ–‰์ด ๊ฐ๊ฐ 5๊ฐœ, 3๊ฐœ ์žˆ์œผ๋ฉด ์‚ฌ์ง„์ฒ˜๋Ÿผ ์ด 15๊ฐœ์˜ ํ–‰์ด ์ถœ๋ ฅ๋˜๋Š” ๊ฒ๋‹ˆ๋‹ค.

์ „๋ถ€ ์ถœ๋ ฅ ํ•˜๋Š”๊ฒŒ ์‹ซ๋‹ค๋ฉด ์–ธ์ œ๋‚˜ WHERE ์กฐ๊ฑด์„์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

WHERE ์กฐ๊ฑด์œผ๋กœ ์–ธ์ œ๋‚˜ ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ํ–‰๋งŒ ํ•„ํ„ฐ๋งํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๊นŒ.

SELECT ํ”„๋กœ๊ทธ๋žจ, ๊ฐ€๊ฒฉ, ๊ฐ•์‚ฌ, ์ถœ์‹ ๋Œ€ํ•™
FROM program, teacher
WHERE program.๊ฐ•์‚ฌid = teacher.id

์ด๋Ÿฌ๋ฉด program.๊ฐ•์‚ฌid = teacher.id ์ธ ํ–‰๋งŒ ํ•„ํ„ฐ๋ง ํ•ด์ค๋‹ˆ๋‹ค.

INNER JOIN

๋ฐฉ๊ธˆ ๋‚ด์šฉ์€ INNER JOIN ๋ฌธ๋ฒ•์„ ์จ๋„ ๊ตฌํ˜„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

ํ…Œ์ด๋ธ” 2๊ฐœ๋ฅผ ์ถœ๋ ฅํ•  ๋•Œ SELECT / FROM / WHERE ์จ๋„ ๋˜๋Š”๋ฐ

SELECT / FROM / INNER JOIN / ON ๋ฌธ๋ฒ• ์จ๋„ ๋˜‘๊ฐ™์Šต๋‹ˆ๋‹ค.

SELECT ์ถœ๋ ฅํ• ์ปฌ๋Ÿผ๋“ค
FROM ํ…Œ์ด๋ธ”1 INNER JOIN ํ…Œ์ด๋ธ”2
ON ์กฐ๊ฑด๋ฌธ 

์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•˜๋ฉด ํ…Œ์ด๋ธ” 2๊ฐœ๋ฅผ ํ•ฉํ•ด์„œ ์ถœ๋ ฅํ•ด์ค๋‹ˆ๋‹ค.

INNER JOIN์€ "๊ณตํ†ต์ ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ…Œ์ด๋ธ” 2๊ฐœ๋ฅผ ๋ถ™์—ฌ์„œ ์ถœ๋ ฅํ•ด์ฃผ์„ธ์š”~" ๋ผ๋Š” ๋œป์ด๋ผ

๋” ์ฝ๊ธฐ ์‰ฌ์›Œ์„œ ๊ถŒ์žฅ๋˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

์šฉ๋„๋ฅผ ๋” ์‰ฝ๊ฒŒ ํ‘œํ˜„ํ•˜์ž๋ฉด ๊ทธ๋ƒฅ ํ…Œ์ด๋ธ”1 ์˜ค๋ฅธ์ชฝ์— ํ…Œ์ด๋ธ”2๋ฅผ ๋ถ™์ด๊ณ  ์‹ถ์œผ๋ฉด

ํ…Œ์ด๋ธ”1 INNER JOIN ํ…Œ์ด๋ธ”2 ์“ฐ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ํ•„ํ„ฐ๋ง์กฐ๊ฑด์€ ON ์”์‹œ๋‹ค.

SELECT ํ”„๋กœ๊ทธ๋žจ, ๊ฐ€๊ฒฉ, ๊ฐ•์‚ฌ, ์ถœ์‹ ๋Œ€ํ•™
FROM program INNER JOIN teacher
ON program.๊ฐ•์‚ฌid = teacher.id 

์•„๊นŒ ์˜ˆ์‹œ๋ฅผ ์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•ด๋„ ๊ฒฐ๊ณผ๋Š” ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๊ฒฐ๋ก ์€ ํ…Œ์ด๋ธ” 2๊ฐœ ์žˆ๋Š” ์ปฌ๋Ÿผ๋“ค์„ ํ•ฉํ•ด์„œ ์ถœ๋ ฅํ•˜๊ณ  ์‹ถ์œผ๋ฉด

ํ…Œ์ด๋ธ”1 INNER JOIN ํ…Œ์ด๋ธ”2 ์“ฐ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  INNER JOIN ๊ฒฐ๊ณผ๋ฅผ ์กฐ๊ฑด์— ๋งž๋Š” ํ–‰๋งŒ ํ•„ํ„ฐ๋งํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ ON ์กฐ๊ฑด๋ฌธ์„ ์‚ฌ์šฉํ•ฉ์‹œ๋‹ค.

(์ฐธ๊ณ )

- JOIN ๋ฌธ๋ฒ•๋’ค์—” ON ๋นผ๋จน์œผ๋ฉด ์—๋Ÿฌ๋‚จ (MySQL์€ ๋นผ๋จน์–ด๋„ ๋ฉ๋‹ˆ๋‹ค)

- ON ๋’ค์˜ ์กฐ๊ฑด์‹์—” ๋‹น์—ฐํžˆ = ๋ง๊ณ  > < ๊ฐ™์€ ๋‹ค๋ฅธ ์กฐ๊ฑด๋„ ๋‹ค ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถœ๋ ฅํ•˜๊ณ  ์‹ถ์€ ํ…Œ์ด๋ธ”์ด 3๊ฐœ ์ด์ƒ์ธ ๊ฒฝ์šฐ

-- ๊ธฐ๋ณธ SELECT
SELECT *
FROM ํ…Œ์ด๋ธ”1, ํ…Œ์ด๋ธ”2, ํ…Œ์ด๋ธ”3
WHERE ์กฐ๊ฑด1 AND ์กฐ๊ฑด2 ...

-- Inner JOIN
SELECT *
FROM ํ…Œ์ด๋ธ”1 
INNER JOIN ํ…Œ์ด๋ธ”2 ON ์กฐ๊ฑด1
INNER JOIN ํ…Œ์ด๋ธ”3 ON ์กฐ๊ฑด2 

CROSS JOIN

ํ…Œ์ด๋ธ”2๊ฐœ ์ด์ƒ์„ ์ถœ๋ ฅํ•  ๋•Œ WHERE / ON ์กฐ๊ฑด๋ฌธ์„ ๋„ฃ์ง€ ์•Š์œผ๋ฉด

์ž๋™์ ์œผ๋กœ CROSS JOIN์ด ๋ฉ๋‹ˆ๋‹ค. (Oracle์€ ON ์กฐ๊ฑด๋ฌธ ์•ˆ์“ฐ๋ฉด ์˜ค๋ฅ˜๋‚จ)

SELECT *
FROM program, teacher
 
SELECT * FROM PROGRAM p CROSS JOIN TEACHER t 

ํ…Œ์ด๋ธ”A์˜ 1๋ฒˆ์งธ ํ–‰ + ํ…Œ์ด๋ธ”B์˜ 1๋ฒˆ์งธ ํ–‰

ํ…Œ์ด๋ธ”A์˜ 1๋ฒˆ์งธ ํ–‰ + ํ…Œ์ด๋ธ”B์˜ 2๋ฒˆ์งธ ํ–‰

ํ…Œ์ด๋ธ”A์˜ 1๋ฒˆ์งธ ํ–‰ + ํ…Œ์ด๋ธ”B์˜ 3๋ฒˆ์งธ ํ–‰

ํ…Œ์ด๋ธ”A์˜ 2๋ฒˆ์งธ ํ–‰ + ํ…Œ์ด๋ธ”B์˜ 1๋ฒˆ์งธ ํ–‰

...

์ด๋ ‡๊ฒŒ ํ–‰์˜ ๋ชจ๋“  ์กฐํ•ฉ์„ ์ถœ๋ ฅํ•ด์ฃผ๋Š”๊ฑธ CROSS JOIN์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ๋ฒ•์„ ๋ฐฐ์› ์œผ๋ฉด ์–ธ์ œ๋‚˜ ์šฉ๋„๋ฅผ ์ƒ๊ฐํ•ด๋ณด๋Š”๊ฒŒ ์ข‹์Šต๋‹ˆ๋‹ค.

๊ทผ๋ฐ CROSS JOIN์€ ๋”ฑํžˆ ์“ธ์ผ์ด ์—†์Šต๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ์šฉ์œผ๋กœ ๋งŽ์€ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•„์š”ํ•  ๋•Œ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ์šฉ์œผ๋กœ ์“ด๋‹ค๊ฑฐ๋‚˜ ํ• ๋•Œ๋Š” ์“ธ ์ˆ˜๋„ ์žˆ๊ฒŸ๋„ค์š”.

CROSS JOIN ๋ฌธ๋ฒ•์ด ์žˆ๋‹ค๋Š”๊ฑด ์ฐธ๊ณ ๋กœ๋งŒ ์•Œ์•„๋‘ก์‹œ๋‹ค.

โœจ ์‹ค์Šต. ์•„๋ž˜ CSV ํŒŒ์ผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ€์–ด๋„ฃ๊ณ  ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

sales๋Š” ์ผ๋ณ„ ๋งค์ถœ์žฅ๋ถ€

product๋Š” ์ƒํ’ˆid, ์ƒํ’ˆ๋ช…, ๊ฐ€๊ฒฉ

user_table์€ ์œ ์ €id, ๊ณ ๊ฐ๋ช…์ด ๋“ค์–ด์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌด์Šจ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด์žˆ๋Š”์ง€ ์‹œ๊ฐ„์Ÿ์•„์„œ ์‚ดํŽด๋ณธ ๋’ค์— ๋ฌธ์ œ ํ’€์–ด๋ด…์‹œ๋‹ค.

์–ธ์ œ๋‚˜ ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ๋“ค ๊ฐ์ƒ๋ถ€ํ„ฐ ํ•ด์•ผ ์ฝ”๋“œ์งœ๊ธฐ ์‰ฌ์›Œ์ง‘๋‹ˆ๋‹ค.

Q1. sales ํ…Œ์ด๋ธ”์„ ์ถœ๋ ฅํ•˜๋Š”๋ฐ item ํ…Œ์ด๋ธ”์— ์žˆ๋Š” ์ƒํ’ˆ๋ช…๊ณผ ๊ฐ€๊ฒฉ๋„ ํ•จ๊ป˜ ์ถœ๋ ฅํ•ด๋ด…์‹œ๋‹ค.

์ถœ๋ ฅ ์˜ˆ์‹œ

Q2. sales ํ…Œ์ด๋ธ”์„ ์ถœ๋ ฅํ•˜๋Š”๋ฐ item ํ…Œ์ด๋ธ”์— ์žˆ๋Š” ์ƒํ’ˆ๋ช…๊ณผ ๊ฐ€๊ฒฉ, user_table์— ์žˆ๋Š” ๊ณ ๊ฐ๋ช…๊นŒ์ง€ ํ•จ๊ป˜ ์ถœ๋ ฅํ•ด๋ด…์‹œ๋‹ค.

์ถœ๋ ฅ ์˜ˆ์‹œ

Q3. ๋‚ ์งœ๋ณ„ ๋งค์ถœ ํ•ฉ๊ณ„๋ฅผ ์ถœ๋ ฅํ•ด๋ด…์‹œ๋‹ค

์ถœ๋ ฅ์˜ˆ์‹œ

Last updated