ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Oracle] FROM 절 JOIN 형태
    RDS/Oracle 2019. 3. 10. 00:36
    반응형

    INNER JOIN 

    INNER JOIN은 OUTER JOIN과 대비하여 내부 JOIN이라고 하며 JOIN 조건에서 동일한 값이 있는 행만 반환합니다. INNER JOIN 표시는 WHERE 절에서 사용하던 JOIN 조건을 FORM 절에서 정의하겠다는 표시이므로 USING 조건절이나 ON 조건절을 필수적으로 사용해야 합니다.

     

    WHERE 절 JOIN 조건

    1
    2
    3
    4
    5
    6
    SELECT E.DEPTNO
          , E.EMPNO
          , E.ENAME
          , D.DNAME
      FROM EMP E, DEPT D
     WHERE E.DEPTNO = D.DEPTNO;
    cs

     

    FROM 절 JOIN 조건

    1
    2
    3
    4
    5
    6
    SELECT E.DEPTNO
          , E.EMPNO
          , E.ENAME
          , D.DNAME
      FROM EMP E INNER JOIN DEPT D
        ON E.DEPTNO = D.DEPTNO;
    cs

     

    INNER JOIN은 디폴트 옵션이므로 생략 가능

    1
    2
    3
    4
    5
    6
    SELECT E.DEPTNO
          , E.EMPNO
          , E.ENAME
          , D.DNAME
      FROM EMP E JOIN DEPT D
        ON E.DEPTNO = D.DEPTNO;
    cs

     

    NATURAL JOIN

    NATURAL JOIN은 두 테이블 간의 동일한 이름을 갖는 모든 컬럼들에 대해 EQUI(=) JOIN을 수행합니다. NATURAL JOIN이 명시되면, 추가로 USING 조건절, ON 조건절, WHERE 절에서 JOIN 조건을 정의할 수 없습니다. 

     

    두 개의 테이블에서 DEPTNO라는 공통된 컬럼을 자동으로 인식하여 JOIN을 처리한 것 입니다. 

    1
    2
    3
    4
    5
    SELECT DEPTNO
           , EMPNO
           , ENAME
          , DNAME
      FROM EMP NATURAL JOIN DEPT;
    cs

     

    '*' 와일드카드처럼 별도의 컬럼 순서를 지정하지 않으면 기준이 되는 컬럼들이 다른 컬럼보다 먼저 출력됩니다. JOIN에 사용된 같은 이름의 컬럼은 하나로 처리됩니다. 

    1
    2
    SELECT *
      FROM EMP NATURAL JOIN DEPT; 
    cs

     

     

     

    JOIN에 사용된 컬럼들은 같은 데이터 유형이어야 하며, ALIAS나 테이블명과 같은 접두사는 붙일 수 없습니다.  

    1
    2
    3
    4
    5
    SELECT E.DEPTNO
          , E.EMPNO
          , E.ENAME
          , D.DNAME
      FROM EMP E NATURAL JOIN DEPT D;
    cs

     

     

    CROSS JOIN

    두 개의 테이블에 대한 CARTESIAN PRODUCT 또는 CROSS PRODUCT와 같은 표현으로, 결과는 양쪽 집합의 M*N 건의 데이터 조합이 발생합니다.

     

    총 56 건 - EMP 14건 * DEPT 4건의 데이터 조합 건수

    1
    2
    3
    4
    SELECT E.ENAME
          , D.DNAME
      FROM EMP E CROSS JOIN DEPT D
     ORDER BY E.ENAME; 
    cs

     

    실행 결과에서 모든 사원 각각은 DEPT의 모든 부서명과 연결되어 4번의 조합으로 출력되었습니다. 

     

    OUTER JOIN 

    INNER(내부) JOIN과 대비하여 OUTER(외부) JOIN이라고 불리며, JOIN 조건에서 동일한 값이 없는 행도 반환할 때 사용할 수 있습니다. OUTER JOIN도 JOIN 조건을 FROM 절에서 정의하겠다는 표시이므로 USING 조건절이나 ON 조건절을 필수로 사용해야 합니다. 그리고, LEFT/RIGHT OUTER JOIN의 경우에는 기준이 되는 테이블이 조인 수행 시 무조건 드라이빙 테이블이 됩니다.

     

    LEFT OUTER JOIN 

    조인 수행 시 먼저 표기된 좌측 테이블에 해당하는 데이터를 먼저 읽은 후, 나중 표기된 우측 테이블에서 JOIN 대상 데이터를 읽어옵니다. 즉, Table A와 B가 있을 때(Table 'A'가 기준), A와 B를 비교해서 B의 JOIN 컬럼에서 같은 값이 있을 때 그 해당 데이터를 가져오고, B의 JOIN 컬럼에서 같은 값이 없는 경우에는 B 테이블에서 가져오는 컬럼들은 NULL 값으로 표시됩니다.

     

    RIGHT OUTER JOIN

    조인 수행 시 LEFT OUTER JOIN과 반대로 우측 테이블이 기준이 되어 결과를 생성합니다. 즉, TABLE A와 B가 있을 때(TABLE 'B'가 기준), A와 B를 비교해서 A의 JOIN 컬럼에서 같은 값이 있을 때 그 해당 데이터를 가져오고, A의 JOIN 컬럼에서 같은 값이 없는 경우에는 A 테이블에서 가져오는 컬럼들은 NULL 값으로 표시됩니다. 

    1
    2
    3
    4
    5
    6
    SELECT E.ENAME
          , D.DEPTNO
          , D.DNAME
          , D.LOC
      FROM EMP E RIGHT OUTER JOIN DEPT D
        ON E.DEPTNO = D.DEPTNO;
    cs

     

    FULL OUTER JOIN 

    조인 수행 시 좌측, 우측 테이블의 모든 데이터를 읽어 JOIN하여 결과를 생성합니다. 즉, TABLE A와 B가 있을 때(TABLE 'A', 'B' 모두 기준), RIGHT OUTER JOIN과 LEFT OUTER JOIN의 결과를 합집합으로 처리한 결과와 동일합니다.  단, UNION ALL이 아닌 UNION 기능과 같으므로 중복되는 데이터는 삭제합니다.

     

    [Oracle] 조인[JOIN] - https://tychejin.tistory.com/101

    [Oracle] 셀프 조인(Self Join) - https://tychejin.tistory.com/108

     

    반응형

    'RDS > Oracle' 카테고리의 다른 글

    [Oracle] 계층형 질의  (0) 2019.03.12
    [Oracle] 집합 연산자(SET OPERATOR)  (0) 2019.03.11
    [Oracle] 조인(Join)  (0) 2019.03.10
    [Oracle] SELECT 문장 실행 순서  (0) 2019.03.10
    [Oracle] ORDER BY 절  (0) 2019.03.10

    댓글

Designed by Tistory.