
2025-03-26
JOIN์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ ๊ฐ ์ด์์ ํ
์ด๋ธ์ ์ฐ๊ฒฐํด์ ํ๋์ ํตํฉ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ง๋๋ SQL ๋ฌธ๋ฒ์ด๋ค.JOIN, ON, LEFT, RIGHT, FULL, CROSS, SELF| JOIN ์ข ๋ฅ | ์ค๋ช |
|---|---|
| INNER JOIN | ์กฐ๊ฑด์ ์ผ์นํ๋ ํ๋ง ๋ฐํ (๊ต์งํฉ) |
| LEFT OUTER JOIN | ์ผ์ชฝ ํ ์ด๋ธ์ ๋ชจ๋, ์ค๋ฅธ์ชฝ์ ์ผ์นํ ๋๋ง ๋ฐํ |
| RIGHT OUTER JOIN | ์ค๋ฅธ์ชฝ ํ ์ด๋ธ์ ๋ชจ๋, ์ผ์ชฝ์ ์ผ์นํ ๋๋ง ๋ฐํ |
| FULL OUTER JOIN | ์์ชฝ ๋ชจ๋ ๋ฐํ, ์ผ์นํ์ง ์์ผ๋ฉด NULL |
| CROSS JOIN | ๋ชจ๋ ํ์ ์กฐํฉ (์นดํฐ์ ๊ณฑ) |
| SELF JOIN | ์๊ธฐ ์์ ๊ณผ ์กฐ์ธ (์๊ธฐ ์ฐธ์กฐ ๊ตฌ์กฐ ํํ) |
-- INNER JOIN: ๋ ํ
์ด๋ธ์์ ์กฐ๊ฑด์ ๋ง๋ ๋ฐ์ดํฐ๋ง ๊ฐ์ ธ์ด
SELECT E.ENAME, -- ์ฌ์ ์ด๋ฆ
D.DNAME -- ๋ถ์ ์ด๋ฆ
FROM EMP E -- EMP ํ
์ด๋ธ์ E๋ก ๋ณ์นญ ์ค์
INNER JOIN DEPT D -- DEPT ํ
์ด๋ธ์ D๋ก ๋ณ์นญ ์ค์ ํ์ฌ ๋ด๋ถ ์กฐ์ธ
ON E.DEPTNO = D.DEPTNO; -- ์ฌ์์ ๋ถ์๋ฒํธ์ ๋ถ์ ํ
์ด๋ธ์ ๋ถ์๋ฒํธ๊ฐ ๊ฐ์ ๋๋ง ์ถ๋ ฅ
๐ ์ค๋ช : ์กฐ๊ฑด์ ๋ง๋ ๋ฐ์ดํฐ๋ง ์ถ์ถ (์: ์ฌ์์ด ์ค์ ๋ก ์ํ ๋ถ์๋ง ํ์๋จ)
-- LEFT OUTER JOIN: ์ผ์ชฝ ํ
์ด๋ธ(EMP)์ ๋ชจ๋, ์ค๋ฅธ์ชฝ์ ๋งค์นญ๋ ๋ฐ์ดํฐ๋ง ์ถ๋ ฅ
SELECT E.ENAME,
D.DNAME
FROM EMP E
LEFT OUTER JOIN DEPT D
ON E.DEPTNO = D.DEPTNO;
๐ ์ค๋ช
: ๋ชจ๋ ์ฌ์์ ๊ธฐ์ค์ผ๋ก ๋ถ์ ์ ๋ณด๋ฅผ ๋ถ์ โ ๋ถ์๊ฐ ์๋ ์ฌ์์ DNAME = NULL
-- RIGHT OUTER JOIN: ์ค๋ฅธ์ชฝ ํ
์ด๋ธ(DEPT)์ ๋ชจ๋, ์ผ์ชฝ์ ๋งค์นญ๋ ๋ฐ์ดํฐ๋ง ์ถ๋ ฅ
SELECT E.ENAME,
D.DNAME
FROM EMP E
RIGHT OUTER JOIN DEPT D
ON E.DEPTNO = D.DEPTNO;
๐ ์ค๋ช
: ๋ชจ๋ ๋ถ์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ฌ์ ์ ๋ณด๋ฅผ ๋ถ์ โ ์ฌ์์ด ์๋ ๋ถ์๋ ENAME = NULL
-- FULL OUTER JOIN: ์์ชฝ ํ
์ด๋ธ์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ํฌํจํ๊ณ ๋งค์นญ
SELECT E.ENAME,
D.DNAME
FROM EMP E
FULL OUTER JOIN DEPT D
ON E.DEPTNO = D.DEPTNO;
๐ ์ค๋ช : ์์ชฝ์ ์กด์ฌํ๋ ๋ฐ์ดํฐ๋ ๋งค์นญ, ์ด๋ ํ์ชฝ์๋ง ์๋ ๋ฐ์ดํฐ๋ ํฌํจ๋จ
-- CROSS JOIN: ๋ ํ
์ด๋ธ์ ๋ชจ๋ ์กฐํฉ ์์ฑ (์กฐ๊ฑด ์์)
SELECT *
FROM EMP
CROSS JOIN DEPT;
๐ ์ค๋ช : EMP์ ๋ชจ๋ ํ DEPT์ ๋ชจ๋ ํ โ ์ ์ฒด ์กฐํฉ (์: EMP 4ํ DEPT 3ํ = 12ํ)
-- SELF JOIN: ๊ฐ์ ํ
์ด๋ธ๋ผ๋ฆฌ ์กฐ์ธ (์: ์ฌ์-์์ฌ ๊ด๊ณ)
SELECT E.ENAME AS EMPLOYEE,
M.ENAME AS MANAGER
FROM EMP E
LEFT JOIN EMP M
ON E.MGR = M.EMPNO;
๐ ์ค๋ช : E๋ ๋ถํ ์ง์, M์ ์์ฌ.
โ ํ ํ ์ด๋ธ ๋ด์์ ์ํ ๊ด๊ณ๋ฅผ ํํํ ๋ ์ฌ์ฉ
| JOIN ์ข ๋ฅ | ๊ธฐ์ค ํ ์ด๋ธ ์ ์ง | ์กฐ๊ฑด ์ผ์น ์ ์ถ๋ ฅ | ์กฐ๊ฑด ๋ถ์ผ์น ์ ๊ฒฐ๊ณผ |
|---|---|---|---|
| INNER JOIN | โ | โ | โ ์ ์ธ๋จ |
| LEFT OUTER JOIN | โ (์ผ์ชฝ) | โ | โ ์ค๋ฅธ์ชฝ์ NULL |
| RIGHT OUTER JOIN | โ (์ค๋ฅธ์ชฝ) | โ | โ ์ผ์ชฝ์ NULL |
| FULL OUTER JOIN | โ (์์ชฝ ๋ชจ๋) | โ | โ ๋ ๋ค NULL ๊ฐ๋ฅ |
| CROSS JOIN | โ | โ ์กฐ๊ฑด ์์ | ๋ชจ๋ ์กฐํฉ |
| SELF JOIN | โ (์๊ธฐ ์์ ) | โ | โ ์กฐ๊ฑด์ ๋ฐ๋ผ NULL ํฌํจ |
JOIN์ ๋จ์ํ ๋ ํ ์ด๋ธ์ ๋ฌถ๋ ๊ธฐ๋ฅ์ ๋์ด์,
๊ด๊ณํ ๋ฐ์ดํฐ์ ์๋ฏธ ์๋ ํด์์ ๊ฐ๋ฅํ๊ฒ ํด์ฃผ๋ ํต์ฌ ๋๊ตฌ๋ผ๋ ๊ฑธ ์๊ฒ ๋์๋ค.
ํนํ ์ค๋ฌด์์๋ INNER JOIN๊ณผ LEFT JOIN์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ฉฐ,
SELF JOIN์ ์กฐ์ง ๊ตฌ์กฐ์ฒ๋ผ ๊ณ์ธต์ ์ธ ๋ฐ์ดํฐ ํํ์ ์ ์ฉํ๋ค๋ ๊ฑธ ํ์คํ ์ดํดํ๊ฒ ๋์๋ค!