๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ฌ๋ฌ ์ข ๋ฅ์ ๋ฐ์ดํฐ๊ฐ ๋ค์ํ ํ ์ด๋ธ์ ๋๋์ด ์ ์ฅ๋๋ ํน์ฑ์ด ์์ต๋๋ค.
๊ทธ๋์ ์์ฉ ํ๋ก๊ทธ๋จ์ด๋ ์ ๋ฌด์ ์ฌ์ฉํ๋ SQL๋ฌธ์ ๋๋ถ๋ถ ๋จ์ผ ํ ์ด๋ธ์ ์กฐํ๋ณด๋ค ์ฌ๋ฌ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ์กฐํฉํฉํ์ฌ ์ถ๋ ฅํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
์ด๋ ๊ฒ ์ฌ๋ฌ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ์กฐํฉํ๋ ๊ฒ์ ๊ฐ๋ฅํ๊ฒ ํด ์ฃผ๋ ์กฐํ๋ฐฉ์์ด ๋ฐ๋ก ์กฐ์ธ์ ๋๋ค.
์งํฉ ์ฐ์ฐ์์์ ์ฐจ์ด์
์กฐ์ธ(join)์ ๋ ๊ฐ ์ด์์ ํ ์ด๋ธ์ ์ฐ๊ฒฐํ์ฌ ํ๋์ ํ ์ด๋ธ์ฒ๋ผ ์ถ๋ ฅํ ๋ ์ฌ์ฉํ๋ ๋ฐฉ์์ ๋๋ค.
์งํฉ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ ๊ฒฐ๊ณผ์ ๋น์ทํ๊ฒ ๋๊ปด์ง ์๋ ์์ง๋ง, ์งํฉ ์ฐ์ฐ์์๋ ๋ถ๋ช ํ ๋ค๋ฆ ๋๋ค.
- ์งํฉ ์ฐ์ฐ์ : ๋ ๊ฐ ์ด์์ SELECT๋ฌธ์ ๊ฒฐ๊ณผ ๊ฐ์ ์ธ๋ก๋ก ์ฐ๊ฒฐํ ๊ฒ (Row๊ฐ ์ถ๊ฐ)
- ์กฐ์ธ : ๋ ๊ฐ ์ด์์ ํ ์ด๋ธ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๋ก๋ก ์ฐ๊ฒฐํ ๊ฒ (Column์ด ์ถ๊ฐ)
FROM์ - ์ฌ๋ฌ ํ ์ด๋ธ ์ฌ์ฉ
์ง๊ธ๊น์ง ์ฌ์ฉํ SELECT๋ฌธ์ FROM์ ์ ํ ์ด๋ธ ํ๋๋ง์ ๋ช ์ํ์ฌ ์ฌ์ฉํ์์ต๋๋ค.
๊ทธ๋ฌ๋ FROM์ ์๋ ์ฌ์ค ์ฌ๋ฌ ๊ฐ์ ํ ์ด๋ธ์ ์ง์ ํ ์ ์์ต๋๋ค.
SELECT์ ์ ์ฌ๋ฌ ์ด์ ๊ตฌ๋ถํ ๋์ ๋ง์ฐฌ๊ฐ์ง๋ก FROM์ ์ ์ฌ๋ฌ ํ ์ด๋ธ์ ๋ช ์ํ ๋ ์ผํ๋ฅผ ๊ตฌ๋ถ์๋ก ์ฌ์ฉํ์ฌ ์ง์ ํฉ๋๋ค.
SELECT
FROM ํ ์ด๋ธ1, ํ ์ด๋ธ2, ...
์ฌ์ฉ ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
SELECT *
FROM EMP, DEPT
๊ทธ๋ฐ๋ฐ ์์ ๊ฐ์ด ์ฌ์ฉํ ๊ฒฝ์ฐ ๋ฐ์ดํฐ๊ฐ ์๊ฐ๋ณด๋ค ๋ง์ด ์ถ๋ ฅ๋๋๋ฐ, ์ด๋ FROM์ ์ ๋ช ์ํ ๊ฐ ํ ์ด๋ธ์ ๊ตฌ์ฑํ๋ ํ์ด ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ก ์กฐํฉ๋์ด ์ถ๋ ฅ๋๊ธฐ ๋๋ฌธ์ ๋๋ค.
(์ด๋ ๊ฒ ๊ฐ ์งํฉ์ ์ด๋ฃจ๋ ๋ชจ๋ ์์์ ์์์์ ๋ฐ์นด๋ฅดํธ ๊ณฑ(ํน์ ์นดํ ์์ ๊ณฑ[Cartesian Product])์ด๋ผ๊ณ ํฉ๋๋ค. ์กฐ์ธ์ ์ด๋ฆ์ผ๋ก๋ ํฌ๋ก์ค ์กฐ์ธ(Cross join) ํน์ ๊ต์ฐจ ์กฐ์ธ์ด๋ผ๊ณ ํฉ๋๋ค.)
์๋ฅผ ๋ค์ด ๋ณด๊ฒ ์ต๋๋ค.
๋ค์๊ณผ ๊ฐ์ MEMBER ํ ์ด๋ธ์ด ์๋ค๊ณ ๊ฐ์ ํ๊ฒ ์ต๋๋ค.
NO | NAME | UNIVNO |
100 | ์ ๋ํ | 1 |
๊ทธ๋ฆฌ๊ณ ๋ค์๊ณผ ๊ฐ์ด UBIVERSITY ํ ์ด๋ธ์ด ์๋ค๊ณ ๊ฐ์ ํ๊ฒ ์ต๋๋ค.
UNIVNO | UNIV |
1 | XX๋ํ๊ต |
2 | YY๋ํ๊ต |
3 | ZZ๋ํ๊ต |
์ด ๋์ FROM์ ์ ๋๋ํ ๋ช ์ํ๋ฉด ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
NO | NAME | UNIVNO | UNIVNO_1 | UNIV |
100 | ์ ๋ํ | 1 | 1 | XX๋ํ๊ต |
100 | ์ ๋ํ | 1 | 2 | YY๋ํ๊ต |
100 | ์ ๋ํ | 1 | 3 | ZZ๋ํ๊ต |
์กฐ์ธ ์กฐ๊ฑด์ด ์์ ๋์ ๋ฌธ์ ์
์์ ์์ ๊ฒฐ๊ณผ๋ ์ฌ์ค ๋ฌธ์ ๊ฐ ์์ต๋๋ค. "์ ๋ํ" ์ด๋ผ๋ ์ฌ๋์ UNIVNO๊ฐ 1์ธ ๋ํ๊ต์ ๋ค๋๊ณ ์์ต๋๋ค.
๊ทธ๋ฐ๋ฐ ์์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด ํ์ ๋ฐ์ดํฐ์ ๋ํ ๋ฐ์ดํฐ๊ฐ ์ ํ์ด ๋ง์๋จ์ด์ง์ง ์๋ ๊ฒฐ๊ณผ๊ฐ ์กด์ฌํฉ๋๋ค.
๋ช ์ํ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๋ก๋ก ์ฐ๊ฒฐํด์ฃผ๊ธฐ ์ํด์ ์กฐ์ธ์ ์ฌ์ฉํ์ง๋ง, ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ๊ฐ๋ก๋ก ์ ํํ ์ฐ๊ฒฐํด์ผ ํ๋์ง์ ๊ธฐ์ค์ ํ๋ก๊ทธ๋๋จธ๊ฐ ์ ํด ์ฃผ์ด์ผ ํฉ๋๋ค.
์์ ์์์์๋ MEMBER ํ ์ด๋ธ๊ณผ UNIVERSICY ํ ์ด๋ธ์ UNIVNO๊ฐ ๊ฐ์ ๋ฐ์ดํฐ๋ง ์กฐํํ ์ ์๊ฒ ํ๋ค๋ฉด ์ ํํ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ ๊ฒ์ ๋๋ค.
๋ฐ๋ผ์ ์๋ก ๋ค๋ฅธ ํ ์ด๋ธ์ ๊ฐ์ ์ด๋ฆ์ Column์ ๊ตฌ๋ณํ๋ ๋ฐฉ๋ฒ์ด ํ์ํฉ๋๋ค.
๊ทธ๋ด ๋ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ฐ๋ก ์๋์ ๊ฐ์ด ์ด ์์ ํ ์ด๋ธ ์ด๋ฆ์ ๋ช ์ํ์ฌ ํน์ ์ด์ด ์ด๋ ํ ์ด๋ธ์ ์ํ ์ด์ธ์ง๋ฅผ ๊ตฌ๋ณํ๋ ๋ฐฉ์์ ๋๋ค.
ํ ์ด๋ธ ์ด๋ฆ.์ด ์ด๋ฆ
(dot(.)์ผ๋ก ์ฐ๊ฒฐํด์ค๋๋ค)
๋ค์์ ์ฌ์ฉ ์์์ ๋๋ค.
SELECT *
FROM EMP, DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO;
ํ ์ด๋ธ์ ๋ณ์นญ(alias) ์ง์
FROM์ ์ ์ง์ ํ ํ ์ด๋ธ์๋ SELECT์ ์ ์ด์์ ์ฌ์ฉํ๋ ๊ฒ์ฒ๋ผ ๋ณ์นญ์ ์ง์ ํ ์ ์์ต๋๋ค.
ํ ์ด๋ธ์ ๋ณ์นญ์ ์ง์ ํ ๋๋ ๋ช ์ํ ํ ์ด๋ธ ์ด๋ฆ์์ ํ ์นธ ๋์ด ํ์ ์ง์ ํฉ๋๋ค
FROM ํ ์ด๋ธ1 ๋ณ์นญ1, ํ ์ด๋ธ2 ๋ณ์นญ2
์ง์ ํ ๋ณ์นญ์ WHERE์ (SELECT์ ์์๋ ์ฌ์ฉ ๊ฐ๋ฅ)์์ ํ ์ด๋ธ์ ์ด์ ์ง์ ํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค.
SELECT *
FROM EMP E, DEPT D
WHERE E.DEPTNO = D.DEPTNO
์กฐ์ธ์ ์ข ๋ฅ
์กฐ์ธ์ ๋์ ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ์ฐ๊ฒฐํ๋๋์ ๋ฐ๋ผ ๋ฑ๊ฐ ์กฐ์ธ, ๋น๋ฑ๊ฐ ์กฐ์ธ, ์์ฒด ์กฐ์ธ, ์ธ๋ถ ์กฐ์ธ ๋ฑ์ผ๋ก ๊ตฌ๋ถํฉ๋๋ค.
์ด์ ํ๋ํ๋ ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
๋ฑ๊ฐ ์กฐ์ธ
๋ฑ๊ฐ ์กฐ์ธ(equi join)์ ํ ์ด๋ธ์ ์ฐ๊ฒฐํ ํ์ ์ถ๋ ฅ ํ์ ๊ฐ ํ ์ด๋ธ์ ํน์ ์ด์ ์ผ์นํ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ์ ํ๋ ๋ฐฉ์์ ๋๋ค.
๋ฐ๋ก ์์์ ์ฌ์ฉํ ๋ฐฉ์์ด ๋ฐ๋ก ๋ฑ๊ฐ ์กฐ์ธ ๋ฐฉ์์ ๋๋ค.
๋ฑ๊ฐ ์กฐ์ธ์ ๋ด๋ถ ์กฐ์ธ(inner join) ํน์ ๋จ์ ์กฐ์ธ์ผ๋ก ๋ถ๋ฅด๊ธฐ๋ ํฉ๋๋ค.
๋น๋ฑ๊ฐ ์กฐ์ธ
๋น๋ฑ๊ฐ ์กฐ์ธ(non-equal join)์ ๋ฑ๊ฐ ์กฐ์ธ ์ธ์ ๋ฐฉ์์ ์๋ฏธํฉ๋๋ค.
์๋ฅผ ๋ค์ด EMP ํ ์ด๋ธ์๋ SAL์ด๋ผ๋ ๊ธ์ฌ ์ ๋ณด๊ฐ ๋ค์ด์๊ณ , SALGRADE ํ ์ด๋ธ์๋ ๊ธ์ฌ์ ๋ฐ๋ฅธ ๋ฑ๊ธ์ด ์ ์ฅ๋์ด ์๋ค๊ณ ํด๋ณด๊ฒ ์ต๋๋ค.
SALGRADE๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
GRADE | LOSAL | HISAL |
1 | 700 | 1200 |
2 | 1201 | 1400 |
3 | 1401 | 200 |
๋ง์ฝ ๊ฐ ์ฌ์์ ์ ๋ณด์ ๋๋ถ์ด, ์ฌ์์ ๊ธ์ฌ ๋ฑ๊ธ ์ ๋ณด๋ฅผ ์ฌ์ฉํ๊ณ ์ ํ๋ค๋ฉด, ๋ฑ๊ฐ ์กฐ์ธ ๋ฐฉ์์ ์ ์ ํ์ง ์์ต๋๋ค.
๊ทธ ์ด์ ๋ ๊ธ์ฌ ๋ฑ๊ธ์ ๋ง์ถ๊ธฐ ์ํด์๋ ์ผ์น ์ฌ๋ถ๊ฐ ์๋๋ผ, ์ต์ ๊ธ์ฌ์ ์ต๋ ๊ธ์ฌ ์ฌ์ด์ ์๋์ง์ ์ฌ๋ถ๋ก ํ๋จํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ด๋ฐ ๊ฒฝ์ฐ์ BETWEEN ์ฐ์ฐ์๋ฅผ ์ด์ฉํ์ฌ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
SELECT *
FROM EMP E, SALGRADE S
WHERE E.SAL BETWEEN S.LOSAL AND S.HISAL;
์์ฒด ์กฐ์ธ
EMP ํ ์ด๋ธ์๋ ์ง์ ์๊ด์ ์ฌ์ ๋ฒํธ๊ฐ ์ ์ฅ๋ MGR ์ด์ด ์์ต๋๋ค.
EMP ํ ์ด๋ธ์ ์ฌ์ ์ ๋ณด์, ํด๋น ์ฌ์์ ์ง์ ์๊ด์ ์ฌ์ ๋ฒํธ๋ฅผ ๋๋ํ ํจ๊ป ์ถ๋ ฅํด์ผ ํ๋ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํด๋ณด์ฃ .
MGR ์ด์ด ํน์ ์ฌ์์ ์ง์ก ์๊ด์ ์ฌ์ ๋ฒํธ๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ฐ์ดํฐ์ด๋ฏ๋ก, ์ด ์ด์ ๋ฐ์ดํฐ์ ์ฌ์ ๋ฒํธ๋ฅผ ์ ์ด์ฉํ๋ฉด ์ฌ์ ์ ๋ณด์ ์ง์ก ์๊ด์ ์ ๋ณด๋ฅผ ์ฐ๊ฒฐํ ์ ์์ ๊ฒ์ ๋๋ค.
์์ฒด ์กฐ์ธ(self join)์ ํ๋์ ํ ์ด๋ธ์ ์ฌ๋ฌ ๊ฐ์ ํ ์ด๋ธ์ฒ๋ผ ํ์ฉํ์ฌ ์กฐ์ธํ๋ ๋ฐฉ์์ผ๋ก, FROM์ ์ ๊ฐ์ ํ ์ด๋ธ์ ์ฌ๋ฌ ๋ฒ ๋ช ์ํ๋ ํ ์ด๋ธ์ ๋ณ์นญ๋ง ๋ค๋ฅด๊ฒ ์ง์ ํ๋ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํฉ๋๋ค.
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;
์ถ๊ฐ๋ก ๊ฒฐ๊ณผ์ MGR์ด์ด NULL์ด๋ผ๋ฉด ๊ฒฐ๊ณผ ๋์์์ ์ ์ธ๋ฉ๋๋ค.
๋ํ ์์ ์์์์ ์ฌ์ฉํ ์์ฒด ์กฐ์ธ ์ญ์ ๋ ๊ฐ์ ํ ์ด๋ธ์์ ์ง์ ํ ์ด ์ค ์ผ์นํ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ์ค์ผ๋ก ์กฐ์ธ๋์์ผ๋ฏ๋ก, ๋ฑ๊ฐ ์กฐ์ธ์ผ๋ก๋ ๋ณผ ์ ์์ต๋๋ค.
์ธ๋ถ ์กฐ์ธ
๋ฐ๋ก ์์์ ์กฐ์ธ ์กฐ๊ฑด์ ์ฌ์ฉํ ์ด ๊ฐ์ด NULL์ด๋ผ๋ฉด ๊ฒฐ๊ณผ ๋์์์ ์ ์ธ๋์ด, ๊ฒฐ๊ณผ ์๊ฐ ์ด ๋ฐ์ดํฐ ์๋ณด๋ค ์ ๊ฒ ๋์จ๋ค๋ ๊ฒ์ ์ ์ ์์์ต๋๋ค.
๊ทธ๋ฌ๋ ์กฐ์ธ ์กฐ๊ฑด ๋ฐ์ดํฐ ์ค ์ด๋ ํ์ชฝ์ด NULL์์๋ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ ๋ ํฌํจ์์ผ์ผ ํ๋ ๊ฒฝ์ฐ๋ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, ์ฌ์ฅ์ ์ง์์๊ด์ ์กด์ฌํ์ง ์์ง๋ง, ์ฌ์ฅ์ ๋ฐ์ดํฐ๋ ๊ฒฐ๊ณผ์ ํฌํจ์์ผํ ํ๋ ๊ฒฝ์ฐ๊ฐ ์์ ์ ์๊ฒ ์ฃ .
์ด๋ ๋ฏ ๋ ํ ์ด๋ธ ๊ฐ ์กฐ์ธ ์ํ์์ ์กฐ์ธ ๊ธฐ์ค ์ด์ ์ด๋ ํ์ชฝ์ด NULL์ด์ด๋ ๊ฐ์ ๋ก ์ถ๋ ฅํ๋ ๋ฐฉ์์ ์ธ๋ถ ์กฐ์ธ(outer join) ์ด๋ผ๊ณ ํฉ๋๋ค.
์ธ๋ถ ์กฐ์ธ์ ์ข์ฐ๋ฅผ ๋ฐ๋ก ๋๋์ด ์ง์ ํ๋๋ฐ, WHERE์ ์ ์กฐ์ธ ๊ธฐ์ค ์ด ์ค ํ์ชฝ์ (+)๊ธฐํธ๋ฅผ ๋ถ์ฌ์ค๋๋ค.
(+) ํ์์ ์์น์ ์ธ๋ถ ์กฐ์ธ์ ์ด๋ฆ์ด ๋ฐ๋์ด๊ธฐ ๋๋ฌธ์ ์ฒ์ ์์ฑํ์ค ๋์๋ ์กฐ๊ธ ํผ๋์ด ์ค์ค ์ ์์ต๋๋ค.
์ผ์ชฝ ์ธ๋ถ์กฐ์ธ (Left Outer Join) | ์ค๋ฅธ์ชฝ ์ธ๋ถ์กฐ์ธ(Right Outer Join) |
WHERE TABLE1.COL1 = TABLE2.COL1(+) | WHERE TABLE1.COL1(+) = TABLE2.COL1 |
์ธ๋ถ ์กฐ์ธ ๋ง์ผ๋ก๋ ์์ชฝ ๋ชจ๋ ์ด์ด ์ธ๋ถ ์กฐ์ธ๋๋ full outer join์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค. ์ด๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ์กฐ๊ธ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ด ํ์ํ๋ฐ, ๋ค์ ํฌ์คํ ์์ ์ด์ด์ ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
Inner Join
LEFT OUTER JOIN
RIGHT OUTER JOIN
FULL OUTER JOIN
CROSS JOIN
SELF JOIN
๐ Reference
'๐พ DataBase > Oracle DB' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Oracle DB] ์กฐ์ธ (2) (0) | 2022.01.28 |
---|---|
[Oracle DB] ์ค๋ผํด ํจ์ (8) - GROUP BY์ , HAVING ์ (0) | 2022.01.25 |
[Oracle DB] ์ค๋ผํด ํจ์ (7) - ๋ค์คํ ํจ์ (SUM, COUNT, MAX, MIN, SUM) (0) | 2022.01.25 |
[Oracle DB] ์ค๋ผํด ํจ์ (6) - ๋จ์ผํ ํจ์ - DECODEํจ์์ CASE๋ฌธ (0) | 2022.01.23 |
[Oracle DB] ์ค๋ผํด ํจ์ (5) - ๋จ์ผํ NULL ์ฒ๋ฆฌ ํจ์ (0) | 2022.01.23 |