Gamcho 2018. 7. 7. 16:20


--#CROSS JOIN - 두 테이블의 존재하는 모든 데이터를 조인

SELECT * FROM EMP, DEPT;


--#EQUI JOIN - 두 테이블의 공통인 칼럼의 값이 일치되는 행으로 결과를 낼때

SELECT E.ENAME, D.DNAME, E.DEPTNO, D.DEPTNO FROM EMP E, DEPT D WHERE E.DEPTNO = D.DEPTNO;


--#Non-Equi Join - 두 테이블의 칼럼 값이 일치하지 않을때

SELECT E.ENAME, E.SAL, S.GRADE FROM EMP E, SALGRADE S WHERE E.SAL BETWEEN S.LOSAL AND S.HISAL; 

SELECT E.ENAME, E.SAL, S.GRADE FROM EMP E, SALGRADE S WHERE E.SAL >= S.LOSAL AND E.SAL <= S.HISAL;


--#OUTER JOIN - 조건에 만족하지 않는 행을 추가로 나타낼때(조건절 모두 +해야함)

SELECT E.ENAME ,D.DEPTNO, D.DNAME FROM EMP E, DEPT D WHERE 

E.DEPTNO(+) = D.DEPTNO ORDER BY D.DEPTNO;


--#SELF JOIN - 한 테이블의 있는 칼럼을 별칭으로 서로 다른 테이블 인것처럼 만듬

SELECT WORK.ENAME, MANAGER.ENAME FROM EMP WORK, EMP MANAGER WHERE WORK.MGR = MANAGER.EMPNO;

SELECT WORK.ENAME ||'의 매니저는 '||MANAGER.ENAME||'이다.' AS "그 사원의 매니져" 

FROM EMP WORK, EMP MANAGER WHERE WORK.MGR = MANAGER.EMPNO;


--##ANSI JOIN

--#ANSI CROSS JOIN

--쉼표 대신 CROSS JOIN

SELECT * FROM EMP CROSS JOIN DEPT;


--#ANSI INNER JOIN

--공통 칼럼을 JOIN하는 경우 쉼표 대신 INNER JOIN

SELECT ENAME, DNAME FROM EMP INNER JOIN DEPT ON EMP.DEPTNO = DEPT.DEPTNO WHERE ENAME='SCOTT';


--#USING

--두 테이블 간 조인 조건에 사용되는 칼럼이 같다면 

SELECT EMP.ENAME, DEPT.DNAME FROM EMP INNER JOIN DEPT USING (DEPTNO) WHERE ENAME='SCOTT';


--#NATURAL JOIN

--조건 절 생략하면 자동적으로 공통 칼럼을 조사하여 내부적으로 조인

SELECT ENAME, DNAME FROM EMP NATURAL JOIN DEPT WHERE ENAME='SCOTT';


--#OUTER JOIN

SELECT E.ENAME, D.DEPTNO, D.DNAME FROM EMP E RIGHT OUTER JOIN DEPT D ON E.DEPTNO = D.DEPTNO;

SELECT E.ENAME, D.DEPTNO, D.DNAME FROM EMP E FULL OUTER JOIN DEPT D ON E.DEPTNO = D.DEPTNO;

--#LEFT OUTER JOIN - 오른쪽 테이블(아래 예제에서 emp테이블)에 일치하는 컬럼의 행이 있는 경우 사용한다.

SELECT E.DEPTNO, D.DEPTNO FROM DEPT D LEFT OUTER JOIN EMP E ON D.DEPTNO = E.DEPTNO;

--#RIGHT OUTER JOIN - 위와 반대로 왼쪽 테이블..

SELECT E.DEPTNO, D.DEPTNO FROM EMP D RIGHT OUTER JOIN DEPT E ON D.DEPTNO = E.DEPTNO;

--#FULL OUTER JOIN - 양쪽 테이블 모두

SELECT E.DEPTNO, D.DEPTNO FROM EMP D FULL OUTER JOIN DEPT E ON D.DEPTNO = E.DEPTNO;