[Database] ์กฐ์ธ(Join)์ด๋?
์กฐ์ธ(Join)์ด๋?
๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ค ๋ณด๋ฉด ํ๋ ์ด์์ ํ ์ด๋ธ์ ์ฐ๊ฒฐํด์ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. ์ด๋ด ๋ ํน์ ํค๋ฅผ ์ค์ฌ์ผ๋ก ํ ์ด๋ธ์ ์ฐ๊ฒฐ์ํค๋ ๊ฒ์ ์กฐ์ธ(Join)์ด๋ผ๊ณ ํ๋ค.
์กฐ์ธ ์ํ์ ์์ชฝ ํ ์ด๋ธ ๊ฐ์ ์ฐ๊ฒฐ ์กฐ๊ฑด์ ์ ํํ ํ์ง ์์ผ๋ฉด M*N ์ฐ์ฐ์ด ๋ฐ์ํ์ฌ ๋งค์ฐ ๋ง์ ์์ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์์คํ ์ฑ๋ฅ์ด ์ ํ๋๋ค.
์กฐ์ธ์ ์ข ๋ฅ
๋๋ฑ ์กฐ์ธ (๋ด๋ถ ์กฐ์ธ)
์์ชฝ ํ ์ด๋ธ์ ๊ณต๋ ์ปฌ๋ผ์ ๊ธฐ์ค์ผ๋ก ๊ฐ์ ํ๋ค์ ์ฐ๊ฒฐ
์์ฐ์กฐ์ธ (๋ด๋ถ ์กฐ์ธ)
์์ชฝ ํ ์ด๋ธ์์ ๋ฐ์ดํฐ ํ์ ๋ฐ ์ปฌ๋ผ๋ช ์ ๊ฐ์ ๊ฐ์ด ์กด์ฌํ ๋ ์๋์ผ๋ก ๋๋ฑ ์กฐ์ธ์ ์ํ
๋น๋๋ฑ ์กฐ์ธ
์์ชฝ ํ ์ด๋ธ์ ๊ณตํต ์นผ๋ผ์ ๊ธฐ์ค์ผ๋ก ๋๋ฑ์ด ์๋ ์กฐ๊ฑด์ผ๋ก ์ฐ๊ฒฐ
์ ํ ์กฐ์ธ
ํ๋์ ํ ์ด๋ธ์ ๊ณตํต๋ ์นผ๋ผ์ด ๋ ๊ฐ ์ด์ ์๋ ๊ฒฝ์ฐ์ ๋๋ฑ ์กฐ์ธ
์ธ๋ถ ์กฐ์ธ
๋๋ฑ ์กฐ์ธ์์ ๋๋ฝ๋ ์์ชฝ ํ ์ด๋ธ ์ ๋ณด๋ฅผ ์ถ๋ ฅํ๊ธฐ ์ํ ์กฐ์ธ
์ผ์ชฝ, ์ค๋ฅธ์ชฝ, ์์ ์ธ๋ถ์กฐ์ธ์ด ์๋ค
USING ์
๋ ๊ฐ ์ด์์ ๊ณตํต ์นผ๋ผ์ด ์กด์ฌํ๋ ๊ฒฝ์ฐ ํ๋์ ์ปฌ๋ผ๋ง ๋๋ฑ์กฐ์ธํ๋๋ก ์ง์ ํด์ฃผ๋ ์
๋ด๋ถ์กฐ์ธ (INNER JOIN) VS ์ธ๋ถ ์กฐ์ธ (OUTER JOIN)
๐ท ๋ด๋ถ ์กฐ์ธ (INNER JOIN)
๊ต์งํฉ ์ฐ์ฐ๊ณผ ์ ์ฌํ๋ค.
ํ๋๋ก ํฉ์น ๋ ํ ์ด๋ธ์ ๊ณตํต ์์ฑ๋ค๋ง ๊ฐ์ ธ์จ๋ค.
// ๋ช
์์ ๋ด๋ถ ์กฐ์ธ ๋ฐฉ๋ฒ
SELECT *
FROM employee INNER JOIN department
ON employee.DepartmentID = department.DepartmentID;
// ์์์ ๋ด๋ถ ์กฐ์ธ ๋ฐฉ๋ฒ
SELECT *
FROM employee, department
WHERE employee.DepartmentID = department.DepartmentID;
๐น1. ์์ฐ ์กฐ์ธ (NATURAL JOIN)
INNER JOINํ๋ ๋ ํ ์ด๋ธ์ ๊ณตํต๋ ์์ฑ์ SELECT ํ ํ ์ด๋ธ์ ์์ฑ์ผ๋ก ํ๋ฒ๋ง ๋ฐํ
๋ฐ๋ผ์ ์์์ ๋ด๋ถ ์กฐ์ธ ๋ฐฉ๋ฒ์ ์์
SELECT * FROM employee NATURAL JOIN department
๐น 2. ๊ต์ฐจ ์กฐ์ธ (CROSS JOIN)
INNER JOINํ๋ ๋ ํ ์ด๋ธ์ ๊ณฑ์งํฉ์ ๋ฐํ
// ๋ช
์์
SELECT * FROM employee CROSS JOIN department;
// ์์์
SELECT * FROM employee, department;
๐ท ์ธ๋ถ ์กฐ์ธ(OUTER JOIN)
์กฐ์ธํ๋ ๋ ํ ์ด๋ธ ์ค์์ ํน์ ํ ์ด๋ธ์ ๋ชจ๋ ์์ฑ๋ค์ ๊ฐ์ง๊ณ ์จ๋ค.
๐น 1. ์ผ์ชฝ ์ธ๋ถ ์กฐ์ธ (LEFT OUTER JOIN)
- ์ผ์ชฝ ํ ์ด๋ธ์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ํฌํจํ๋ ๊ฒฐ๊ณผ๋ฅผ ์์ฑ
SELECT *
FROM employee LEFT OUTER JOIN department
ON employee.DepartmentID = department.DepartmentID;
๐น 2. ์ค๋ฅธ์ชฝ ์ธ๋ถ ์กฐ์ธ (RIGHT OUTER JOIN)
- ์ค๋ฅธ์ชฝ ํ ์ด๋ธ์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ํฌํจํ๋ ๊ฒฐ๊ณผ๋ฅผ ์์ฑ
SELECT *
FROM employee RIGHT OUTER JOIN department
ON employee.DepartmentID = department.DepartmentID;
๐น 3. ์์ ์ธ๋ถ ์กฐ์ธ (FULL OUTER JOIN)
- ์์ชฝ ํ ์ด๋ธ ๋ชจ๋ ๋ฐ์ดํฐ ํฌํจํ๋ ๊ฒฐ๊ณผ ์์ฑ
SELECT *
FROM employee FULL OUTER JOIN department
ON employee.DepartmentID = department.DepartmentID;
Reference
https://parkmuhyeun.github.io/etc/database/2022-06-27-Join/
๋ฐ์ดํฐ๋ฒ ์ด์ค - ์กฐ์ธ(Join)
๋ฐ์ดํฐ๋ฒ ์ด์ค - ์กฐ์ธ(Join) 27 Jun 2022 in etc / Database on Database, Join Join์ ์ข ๋ฅ Join์ด๋? ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ด์ ์ฌ๋ฌ ํ ์ด๋ธ์ ๋ ์ฝ๋๋ฅผ ์กฐํฉํ์ฌ ํ๋์ ์ด๋ก ๋ํ๋ธ ๊ฒ์ด๋ค. ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋
parkmuhyeun.github.io