ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 오라클 SQL - JOIN
    웹프로그래밍/데이터베이스 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;