SELECT ๋ฌธ์์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ ์ธ๊ฐ์ง ๋ฐฉ๋ฒ์ ๋ํ์ฌ ์ด์ผ๊ธฐํ๋ค.
๊ทธ ์ค ์ธ๋ฒ์งธ ๋ฐฉ๋ฒ์ธ ์กฐ์ธ์ ๋ํด ์์๋ณด์
1. ์กฐ์ธ join
- ๋ ๊ฐ ์ด์์ ํ ์ด๋ธ์ ์ฐ๊ฒฐํ์ฌ ํ๋์ ํ ์ด๋ธ์ฒ๋ผ ์ถ๋ ฅํ ๋ ์ฌ์ฉํ๋ ๋ฐฉ์
- ์งํฉ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ ๋ฐฉ๋ฒ๊ณผ ๋น์ทํ์ง๋ง ์งํฉ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ ๊ฒฐ๊ณผ๋ ๋ ๊ฐ ์ด์์ SELECT ๋ฌธ์ ๊ฒฐ๊ณผ ๊ฐ์ ์ธ๋ก๋ก ์ฐ๊ฒฐํ ๊ฒ์ด๊ณ , ์กฐ์ธ์ ์ฌ์ฉํ ๊ฒฐ๊ณผ๋ ๋ ๊ฐ ์ด์์ ํ ์ด๋ธ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๋ก๋ก ์ฐ๊ฒฐํ ๊ฒ
- ์กฐ์ธ ์กฐ๊ฑด์ ์ ๋๋ก ์ง์ ํ์ง ์์ผ๋ฉด ๋ฐ์นด๋ฅดํธ ๊ณฑ ๋๋ฌธ์ ํ์ ์๋ ๋ฐ์ดํฐ๊น์ง ๋ชจ๋ ์กฐํฉ๋์ด ์ถ๋ ฅ๋๋ค
- ๋ฐ์นด๋ฅดํธ ๊ณฑ ํ์์ด ์ผ์ด๋์ง ์๊ฒ ํ๋ ๋ฐ ํ์ํ ์กฐ๊ฑด์์ ์ต์ ๊ฐ์๋ ์กฐ์ธ ํ ์ด๋ธ ๊ฐ์ - 1 ๊ฐ ์ด๋ค
ex) A, B, C ์ธ๊ฐ์ ํ ์ด๋ธ์ ์ฐ๊ฒฐํ๋ ค๋ฉด A์ B ํ ์ด๋ธ์ ์ฐ๊ฒฐํด ์ค ์นผ๋ผ ํ๋, A์ B๊ฐ ์ฐ๊ฒฐ๋ ์ํ์์ C ํ ์ด๋ธ์ ์ฐ๊ฒฐํด ์ค ์นผ๋ผ ํ๋ ์ด ๋๊ฐ์ ์กฐ๊ฑด์ด ํ์
- ์กฐ์ธ ์กฐ๊ฑด ๋ฐ์ดํฐ ์ค ์ด๋ ํ์ชฝ์ธ null์ด๋ฉด ๊ฒฐ๊ณผ์ ํฌํจ๋์ง ์์
-- 1. FROM ์ ์ ์ฌ๋ฌ ํ
์ด๋ธ ์ ์ธํ๊ธฐ
SELECT *
FROM EMP, DEPT
ORDER BY EMPNO;
-- 2. ์นผ๋ผ ์ด๋ฆ์ ๋น๊ตํ๋ ์กฐ๊ฑด์์ผ๋ก ์กฐ์ธํ๊ธฐ
SELECT *
FROM EMP, DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO
ORDER BY EMPNO;
-- 3. ํ
์ด๋ธ ์ด๋ฆ์ ๋ณ์นญ์ผ๋ก ํํํ๊ธฐ
FROM ํ
์ด๋ธ์ด๋ฆ1 ๋ณ์นญ1, ํ
์ด๋ธ์ด๋ฆ2 ๋ณ์นญ2 …
SELECT *
FROM EMP E, DEPT D
WHERE E.DEPTNO = D.DEPTNO
ORDER BY EMPNO;
(1) EMP์ DEPT ๋ ํ ์ด๋ธ์ FROM ์ ์ ํจ๊ป ๋ช ์ํ์ฌ ์ถ๋ ฅํ๋ฉด ๊ฐ ํ ์ด๋ธ์ ๊ตฌ์ฑํ๋ ํ์ด ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ก ์กฐํฉ๋์ด ์ถ๋ ฅ๋๊ธฐ ๋๋ฌธ์ (EMP ํ ๊ฐ์) X (DEPT ํ ๊ฐ์) ๊ฐ์ ํ์ด ์ถ๋ ฅ๋๋ค
(2) EMP.DEPTNO = DEPT.DEPTNO ์กฐ๊ฑด์ผ๋ก ๊ฐ ํ ์ด๋ธ์ DEPTNO๊ฐ ๊ฐ์ ํ๋ง ์ถ๋ ฅ๋๋ค (ํน์ ์นผ๋ผ ๊ฐ์ด ๊ฐ์ ๋ฐ์ดํฐ๋ง ์ถ๋ ฅ)
(3) FROM ์ ์ ์ง์ ํ ํ ์ด๋ธ์๋ SELECT ์ ์ ์นผ๋ผ์ ์ฌ์ฉํ ๊ฒ ์ฒ๋ผ ๋ณ์นญ์ ์ง์ ํ ์ ์๋ค. ๋ณ์นญ์ ์ถ๋ ฅ ๊ฒฐ๊ณผ์ ์ํฅ์ ์ฃผ์ง ์๋๋ค
2. ๋ฑ๊ฐ ์กฐ์ธ equi join
= ๋จ์ ์กฐ์ธ simple join
- ๋ด๋ถ ์กฐ์ธ inner join ์ ํฌํจ๋๋ค
- ํ ์ด๋ธ์ ์ฐ๊ฒฐํ ํ ์ถ๋ ฅ ํ์ ๊ฐ ํ ์ด๋ธ์ ํน์ ์นผ๋ผ์ ์ผ์นํ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ์ ํ๋ ๋ฐฉ์
- ์ผ๋ฐ์ ์ผ๋ก ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ์กฐ์ธ ๋ฐฉ์์ผ๋ก ์ด๋ฆ์ ํน๋ณํ ๋ช ์ํ์ง ์์ผ๋ฉด '์กฐ์ธ์ ์ฌ์ฉํ๋ค'๋ ๊ฒ์ ๋๋ถ๋ถ ๋ฑ๊ฐ ์กฐ์ธ
- ์กฐ์ธ์ ์ค๋ช ํ ๋ ์ฌ์ฉํ ์์ ๊ฐ ๋ฑ๊ฐ ์กฐ์ธ
-- 1. ๋ ํ
์ด๋ธ์์ ๋ถ์ ๋ฒํธ๊ฐ ๋๊ฐ์ ์นผ๋ผ ์ด๋ฆ์ผ๋ก ํฌํจ๋์ด ์์ ๋
SELECT EMPNO, ENAME, DEPTNO, DNAME, LOC
FROM EMP E, DEPT D
WHERE E.DEPTNO = D.DEPTNO;
-- 2. ์นผ๋ผ ์ด๋ฆ์ ๊ฐ๊ฐ์ ํ
์ด๋ธ ์ด๋ฆ๋ ํจ๊ป ๋ช
์ํ ๋
SELECT E.EMPNO, E.ENAME, D.DEPTNO, D.DNAME, D.LOC
FROM EMP E, DEPT D
WHERE E.DEPTNO = D.DEPTNO
ORDER BY D.DEPTNO, E.EMPNO;
(1) EMP ํ ์ด๋ธ๊ณผ DEPT ํ ์ด๋ธ์ ๊ฐ๊ฐ DEPTNO ์นผ๋ผ์ด ์กด์ฌํ ๋ SELECT ์ ์ DEPTNO ์นผ๋ผ์ ํ ์ด๋ธ ๊ตฌ๋ถ ์์ด ๋ช ์ํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ์ฌ ์คํ๋์ง ๋ชปํ๋ค
(2) SELECT ๋ฌธ์ ํ ์ด๋ธ ์ด๋ฆ์ ๊ตฌ๋ถํ์ฌ ๊ฐ๊ฐ ๋ช ์ํด ์ฃผ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์๋๋ค
3. ๋น๋ฑ๊ฐ ์กฐ์ธ non-equi join
- ๋ฑ๊ฐ ์กฐ์ธ ์ธ์ ๋ฐฉ์์ ์๋ฏธ
- ๋ด๋ถ ์กฐ์ธ inner join ์ ํฌํจ๋๋ค
SELECT *
FROM EMP E, SALGRADE S
WHERE E.SAL BETWEEN S.LOSAL AND S.HISAL;
(1) EMP ํ ์ด๋ธ์ SAL ์นผ๋ผ์ ๊ฐ์ด SALGRADE ํ ์ด๋ธ์ LOSAL ์นผ๋ผ๊ณผ HISAL ์นผ๋ผ ์ฌ์ด์ ๊ฐ์ผ ๋๋ง ์ถ๋ ฅ
4. ์์ฒด ์กฐ์ธ self join
- ํ๋์ ํ ์ด๋ธ์ ์ฌ๋ฌ ๊ฐ์ ํ ์ด๋ธ์ฒ๋ผ ํ์ฉํ์ฌ ์กฐ์ธํ๋ ๋ฐฉ์
- FROM ์ ์ ๊ฐ์ ํ ์ด๋ธ์ ์ฌ๋ฌ ๋ฒ ๋ช ์ํ๋ ํ ์ด๋ธ์ ๋ณ์นญ๋ง ๋ค๋ฅด๊ฒ ์ง์ ํ๋ ๋ฐฉ์์ผ๋ก ์ฌ์ฉ
- ๋ ๊ฐ ํ ์ด๋ธ์์ ์ง์ ํ ์นผ๋ผ ์ค ์ผ์นํ ํ ์ด๋ธ์ ๊ธฐ์ค์ผ๋ก ์กฐ์ธ๋์์ผ๋ฏ๋ก ํฐ ๋ฒ์์์๋ ๋ฑ๊ฐ ์กฐ์ธ์ผ๋ก ๋ณผ ์ ์์
- ๋ด๋ถ ์กฐ์ธ inner join ์ ํฌํจ๋๋ค
SELECT E1.EMPNO, E1.ENAME, E1.MGR,
E2.EMPNO AS MGR_EMPNO, E2.ENAME AS MGR_ENAME
FROM EMP E1, EMP E2
WHERE E1.MGR = E2.EMPNO;
(1) EMP ํ ์ด๋ธ์์ EMPNO์ ENAME, ๋ด๋น ๋งค๋์ ์ EMPNO์ ENAME์ ๊ฐ์ EMP ํ ์ด๋ธ์์ ์กฐ์ธํ์ฌ ์ถ๋ ฅ
5. ์ธ๋ถ ์กฐ์ธ outer join
- ์กฐ์ธ ์กฐ๊ฑด ๋ฐ์ดํฐ ์ค ์ด๋ ํ์ชฝ์ด null์์๋ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ ๋ ํฌํจ์์ผ์ผ ํ๋ ๊ฒฝ์ฐ ์ธ๋ถ ์กฐ์ธ์ ์ฌ์ฉ
- ์ธ๋ถ ์กฐ์ธ์ ์ข์ฐ๋ฅผ ๋ฐ๋ก ๋๋์ด ์ง์ ํ๋๋ฐ, WHERE ์ ์ ์กฐ์ธ ๊ธฐ์ค ์นผ๋ผ ์ค ํ ์ชฝ์ (+) ๊ธฐํธ๋ฅผ ๋ถ์ฌ ์ค๋ค
- ์ผ์ชฝ ์ธ๋ถ ์กฐ์ธ Left Outer Join : WHERE TABLE1.COL1 = TABLE2.COL1(+)
-> ์ผ์ชฝ ์นผ๋ผ์ ๊ธฐ์ค์ผ๋ก ์ค๋ฅธ์ชฝ ์นผ๋ผ์ ๋ฐ์ดํฐ ์กด์ฌ ์ฌ๋ถ์ ์๊ด์์ด ์ถ๋ ฅํ๋ผ๋ ๋ป
- ์ค๋ฅธ์ชฝ ์ธ๋ถ ์กฐ์ธ Right Outer Join : WHERE TABLE1.COL1(+) = TABLE2.COL1
-> ์ค๋ฅธ์ชฝ ์นผ๋ผ์ ๊ธฐ์ค์ผ๋ก ์ผ์ชฝ ์นผ๋ผ์ ๋ฐ์ดํฐ ์กด์ฌ ์ฌ๋ถ์ ์๊ด์์ด ์ถ๋ ฅํ๋ผ๋ ๋ป
- ์ธ๋ถ ์กฐ์ธ ๋ฐฉ์์ผ๋ก๋ ์์ชฝ ๋ชจ๋ ์ด์ด ์ธ๋ถ ์กฐ์ธ๋๋ ์ ์ฒด ์ธ๋ถ ์กฐ์ธ full outer join ์ฌ์ฉ์ ๋ถ๊ฐ๋ฅ