Inner Join
Last updated
Last updated
์ X ์ ๊ทํ ํ ์ด๋ธ ๋ง๋๋ ๊ฒ ๊น์ง๋ ์ข์๋ฐ
๊ทธ๊ฑฐํ๋ค๊ณ ํ ์ด๋ธ์ ๋ค ์ชผ๊ฐ๋์ผ๋ฉด ๋์ค์ ์ถ๋ ฅ์ ์ด๋ป๊ฒ ํ ๊ฒ์ ๋๊น.
SELECT์ JOIN๋ฌธ๋ฒ ์ ์ฐ๋ฉด ํด๊ฒฐ๋๊ธฐ ๋๋ฌธ์ ๋ณ๋ก ๊ฑฑ์ ์ ์ํด๋ ๋ฉ๋๋ค.
JOIN ์ฝ๊ฒ ์ดํดํ๋ ค๋ฉด ํ ์ด๋ธ ํฉ์น๋ ๋ฐฉ๋ฒ๋ถํฐ ์์์ผํ๋๋ฐ ๊ทธ๊ฒ๋ถํฐ ์์๋ด ์๋ค.
์ง๋์๊ฐ์์ด๋ง๋ค์๋ program ํ ์ด๋ธ๊ณผ์ด teacher ํ ์ด๋ธ์์ ์ ์ด๋ฏธ์ง ์ฒ๋ผ ํ๋ก๊ทธ๋จ,๊ฐ๊ฒฉ,๊ฐ์ฌ,์ถ์ ๋ํ๊น์ง 4๊ฐ์ ์ปฌ๋ผ์ ํ ๋ฒ์ ์ถ๋ ฅํ๊ณ ์ถ์ผ๋ฉด ์ด๋ป๊ฒ ์ฟผ๋ฆฌ๋ฌธ์ ์์ฑํด์ผ ํ ๊น?
SELECT FROM ๋ฌธ๋ฒ์ธ ๋ 2๊ฐ ์ด์์ ํ ์ด๋ธ์ ์ ์ ์ ์์ต๋๋ค.
๊ทธ๋ผ ํ๋์ ํ ์ด๋ธ๋ก ํฉ์ณ์ ์ถ๋ ฅํด์ค๋๋ค. ์ปฌ๋ผ๋ ์์ ๋กญ๊ฒ ์ ํ๊ฐ๋ฅ
์ด๋ฌ๋ฉด ์ฌ๋ฌ ํ ์ด๋ธ๊ณผ ์ปฌ๋ผ์ ํ๋์ ํ ์ด๋ธ๋ก ์ถ๋ ฅํด์ค๋๋ค.
(์ฐธ๊ณ ) ์ปฌ๋ผ๋ช ์ด ๊ฒน์น ์ ์์ผ๋
๋ฌ๋ ์ปฌ๋ผ๋ช ๋์ ํ ์ด๋ธ๋ช .์ปฌ๋ผ๋ช ์ด๋ ๊ฒ ์ ์ฐ์ด์ ์ฐ๋๊ฒ ๋ ์ข์ ์ต๊ด์ ๋๋ค.
๊ทผ๋ฐ ์คํํด๋ณด๋ฉด ๋ญ๊ฐ ์ด์ํ ์ ์ด ์์ต๋๋ค.
ํ ์ด๋ธ 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 ์กฐ๊ฑด์ผ๋ก ์ธ์ ๋ ๋ด๊ฐ ์ํ๋ ํ๋ง ํํฐ๋งํ ์ ์๋ค๊ณ ํ์ง ์์์ต๋๊น.
์ด๋ฌ๋ฉด program.๊ฐ์ฌid = teacher.id ์ธ ํ๋ง ํํฐ๋ง ํด์ค๋๋ค.
๋ฐฉ๊ธ ๋ด์ฉ์ INNER JOIN ๋ฌธ๋ฒ์ ์จ๋ ๊ตฌํ ๊ฐ๋ฅํฉ๋๋ค.
ํ ์ด๋ธ 2๊ฐ๋ฅผ ์ถ๋ ฅํ ๋ SELECT / FROM / WHERE ์จ๋ ๋๋๋ฐ
SELECT / FROM / INNER JOIN / ON ๋ฌธ๋ฒ ์จ๋ ๋๊ฐ์ต๋๋ค.
์ด๋ ๊ฒ ์์ฑํ๋ฉด ํ ์ด๋ธ 2๊ฐ๋ฅผ ํฉํด์ ์ถ๋ ฅํด์ค๋๋ค.
INNER JOIN์ "๊ณตํต์ ์ ๊ธฐ๋ฐ์ผ๋ก ํ ์ด๋ธ 2๊ฐ๋ฅผ ๋ถ์ฌ์ ์ถ๋ ฅํด์ฃผ์ธ์~" ๋ผ๋ ๋ป์ด๋ผ
๋ ์ฝ๊ธฐ ์ฌ์์ ๊ถ์ฅ๋๋ ๋ฐฉ์์ ๋๋ค.
์ฉ๋๋ฅผ ๋ ์ฝ๊ฒ ํํํ์๋ฉด ๊ทธ๋ฅ ํ ์ด๋ธ1 ์ค๋ฅธ์ชฝ์ ํ ์ด๋ธ2๋ฅผ ๋ถ์ด๊ณ ์ถ์ผ๋ฉด
ํ ์ด๋ธ1 INNER JOIN ํ ์ด๋ธ2 ์ฐ๋ฉด ๋ฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ํํฐ๋ง์กฐ๊ฑด์ ON ์์๋ค.
์๊น ์์๋ฅผ ์ด๋ ๊ฒ ์์ฑํด๋ ๊ฒฐ๊ณผ๋ ๊ฐ์ต๋๋ค.
๊ทธ๋์ ๊ฒฐ๋ก ์ ํ ์ด๋ธ 2๊ฐ ์๋ ์ปฌ๋ผ๋ค์ ํฉํด์ ์ถ๋ ฅํ๊ณ ์ถ์ผ๋ฉด
ํ ์ด๋ธ1 INNER JOIN ํ ์ด๋ธ2 ์ฐ๋ฉด ๋ฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ INNER JOIN ๊ฒฐ๊ณผ๋ฅผ ์กฐ๊ฑด์ ๋ง๋ ํ๋ง ํํฐ๋งํ๊ณ ์ถ์ ๊ฒฝ์ฐ ON ์กฐ๊ฑด๋ฌธ์ ์ฌ์ฉํฉ์๋ค.
(์ฐธ๊ณ )
- JOIN ๋ฌธ๋ฒ๋ค์ ON ๋นผ๋จน์ผ๋ฉด ์๋ฌ๋จ (MySQL์ ๋นผ๋จน์ด๋ ๋ฉ๋๋ค)
- ON ๋ค์ ์กฐ๊ฑด์์ ๋น์ฐํ = ๋ง๊ณ > < ๊ฐ์ ๋ค๋ฅธ ์กฐ๊ฑด๋ ๋ค ๋ค์ด๊ฐ ์ ์์ต๋๋ค.
ํ ์ด๋ธ2๊ฐ ์ด์์ ์ถ๋ ฅํ ๋ WHERE / ON ์กฐ๊ฑด๋ฌธ์ ๋ฃ์ง ์์ผ๋ฉด
์๋์ ์ผ๋ก CROSS JOIN์ด ๋ฉ๋๋ค. (Oracle์ ON ์กฐ๊ฑด๋ฌธ ์์ฐ๋ฉด ์ค๋ฅ๋จ)
ํ ์ด๋ธ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, ๊ณ ๊ฐ๋ช ์ด ๋ค์ด์์ต๋๋ค.
๋ฌด์จ ๋ฐ์ดํฐ๊ฐ ๋ค์ด์๋์ง ์๊ฐ์์์ ์ดํด๋ณธ ๋ค์ ๋ฌธ์ ํ์ด๋ด ์๋ค.
์ธ์ ๋ ํ ์ด๋ธ ๋ฐ์ดํฐ๋ค ๊ฐ์๋ถํฐ ํด์ผ ์ฝ๋์ง๊ธฐ ์ฌ์์ง๋๋ค.