[Oracle] 오라클 조인

Ga0·2023년 7월 23일
0

SQL

목록 보기
4/6

조인(JOIN)

  • 각 테이블 간의 공통된 컬럼(조건)으로 합쳐 표현한다.(데이터를 공통된 컬럼(조건)을 기준으로 합치는 것)

  • 종류로는 크게 INNER JOIN, OUTER JOIN이 있다.

  • 예시로는 아래의 테이블로 들 예정이다.

오라클 INNER JOIN

SELECT  TB.EMP_CD
      , TB.EMP_NM
      , TB.EMP_TEL
      , TA.DEPT_CD
 FROM  DEPT TA
     , EMPLOYEE TB
 WHERE TB.EMP_NM LIKE '%영' 
  AND TB.DEPT_CD = TA.DEPT_CD;

  • 오라클 조인은 조인 칼럼(조건)을 WHERE절에 작성한다.
  • 해당 SQL문을 보면 메인 테이블이 TB이고, 조인 테이블이 TB인 것을 알 수 있다.
  • 그리고 TB.DEPT_CD = TA.DEPT_CD 이 조인 칼럼인 것을 알 수 잇다.

오라클 LEFT OUTER JOIN

SELECT  TB.EMP_CD
      , TB.EMP_NM
      , TB.EMP_TEL
      , TA.DEPT_CD
 FROM  DEPT TA
     , EMPLOYEE TB
 WHERE TB.EMP_NM LIKE '%영' 
  AND TB.DEPT_CD = TA.DEPT_CD(+);

  • 조인 테이블은 TA인 것을 알 수 있다.
  • 조인 조건이 작성된 WHERE절에 (+)이 붙어있는 것을 볼 수 있는데, 이 방식이 오라클에서 OUTER JOIN을 표현하는 방식이다.
  • 다시 말해 조인 컬럼에 (+)을 붙이면 해당 컬럼의 테이블이 조인 테이블이 된다는 의미이다.
  • 결과 이미지를 보면 아시다시피 OUTER JOIN은 메인 테이블(여기서 EMPLOYEE TABLE)의 데이터는 무조건 조회가 되고 조인 테이블(여기서, DEPT TABLE)은 참조 용도로만 사용된다.

오라클 RIGHT OUTER JOIN

SELECT  TB.EMP_CD
      , TB.EMP_NM
      , TB.EMP_TEL
      , TA.DEPT_CD
      , TA.DEPT_NM
      , TA.DEPT_UP_CD
 FROM  DEPT TA
     , EMPLOYEE TB
 WHERE TB.DEPT_CD(+) = TA.DEPT_CD
  AND TB.EMP_NM LIKE '%영' 
  OR TB.EMP_NM IS NULL; 

  • RIGHT OUTER JOIN은 LEFT OUTER JOIN과 같이 OUTER JOIN이면서 메인 테이블 대상이 다르다.
  • SQL문을 보면 왼쪽 테이블 TB(EMPLOYEE)에 (+)이 붙은 것 을 알 수 있다.
  • 이는 조인 테이블이 EMPLOYEE이고 메인 테이블이 DEPT가 된다.

오라클 CROSS JOIN

  • CROSS JOIN은 두 테이블의 모든 데이터가 서로 한번씩 조인한다.
  • 즉, 예시로 든다면 지금 EMPLOYEE(8행)과 DEPT(5행)으로 총 40행이 조회될 것이라 예측할 수 있다.
SELECT  TB.EMP_CD
      , TB.EMP_NM
      , TB.EMP_TEL
      , TA.DEPT_CD
      , TA.DEPT_NM
 FROM  DEPT TA
     , EMPLOYEE TB
 WHERE TA.DEPT_CD IN ( SELECT DEPT_CD
                        FROM DEPT);

  • 일단 예측대로 행이 40행 조회된 것을 볼 수 있다.
  • CROSS JOIN을 위한 FROM 절에 테이블들을 작성하고 WHERE절에 조인 컬럼을 작성하지 않으면 두개의 테이블이 서로 CROSS JOIN이 된다.

오라클 FULL OUTER JOIN

  • 오라클에서 FULL OUTER JOIN은 LEFT OUTER JOIN과 RIGHT OUTER JOIN이 합쳐진 것이다.(오라클 10g이상 사용가능)
SELECT  TA.EMP_CD
      , TA.EMP_NM
      , TA.EMP_TEL
      , TB.DEPT_CD
      , TB.DEPT_NM
 FROM  EMPLOYEE TA
  FULL OUTER JOIN DEPT TB
   ON TA.DEPT_CD = TB.DEPT_CD;
  • 형태가 ANSI JOIN 형태와 유사한 것을 볼 수 있다.
  • 두개의 테이블이 조인되면(조건에 맞으면) 데이터는 한 행으로 출력되는 것을 볼 수 있고, 그렇지 않으면(조인되지 않으면) 데이터는 새로운 행으로 생성되어 출력되는 것을 볼 수 있다.
  • 즉, 조인이 되어도 되지 않아도 두 개의 테이블의 데이터가 모두 조회된다.

0개의 댓글