각 테이블 간의 공통된 컬럼(조건)으로 합쳐 표현한다.(데이터를 공통된 컬럼(조건)을 기준으로 합치는 것)
종류로는 크게 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
https://www.dofactory.com/sql/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형태와 유사한 것을 볼 수 있다.
두개의 테이블이 조인되면(조건에 맞으면) 데이터는 한 행으로 출력되는 것을 볼 수 있고, 그렇지 않으면(조인되지 않으면) 데이터는 새로운 행으로 생성되어 출력되는 것을 볼 수 있다.