INNER JOIN & OUTER JOIN Venn diagram

1. INNER JOIN

- 조인 조건에 해당하는 데이터가 존재할 경우에만 출력한다.

종류 설명  구분 설명 및 예시
EQUI JOIN - 테이블을 연결한 후에 출력 행을 각 테이블의 특정 열에 일치한 데이터를 기준으로 선정하는 방식이다. Oracle SELECT E.EMPNO, E.ENAME, D.DEPTNO
FROM EMP E, DEPT D
WHERE E.DEPTNO = D.DEPTNO
ORDER BY D.DEPTNO, E.EMPNO;
SQL-99 표준 문법 NATURAL JOIN
- 기존 등가 조인과 다르게 조인 기준 열을 SELECT절에 명시할 때 테이블 이름을 붙이면 안된다.
- SELECT E.EMPNO, DEPTNO, D.DNAME
FROM EMP E NATURAL JOIN DEPT D
ORDER BY DEPTNO, E.EMPNO;
JOIN ~ USING
- NATURAL JOIIN이 자동으로 조인 기준 열을 지정하는 것과 달리 USING 키워드에 조인 기준으로 사용할 열을 명시해야 한다.
SELECT E.EMPNO, DEPTNO, D.DNAME
FROM EMP E JOIN DEPT D USING (DEPTNO)
WHERE SAL>=3000
ORDER BY DEPTNO, E.EMPNO;
JOIN ~ ON
- 조인 기준 조건식은 ON에 명시하고 그 밖의 출력 행을 걸러 내기 위해 WHERE 조건식을 따로 사용한다.
- SELECT E.EMPNO, E.DEPTNO, D.DNAME
FROM EMP E JOIN DEPT D ON (E.DEPTNO=D.DEPTNO)
WHERE SAL>=3000
ORDER BY E.DEPTNO, E.EMPNO;
NON EQUI JOIN - 열의 일치 여부를 기준으로 테이블을 조인했던 EQUI JOIN 외의 방식을 의미한다. Oracle SELECT *
FROM EMP E, SALGRADE S
WHERE E.SAL BETWEEN S.LOSAL AND S.HISAL;
SELF JOIN - FROM절에 같은 테이블을 여러 번 명시하되 테이블의 별칭만 다르게 지정하는 방식으로 사용한다.
- 하나의 테이블을 여러 개의 테이블처럼 활용하여 조인하는 방식으로, 물리적으로 동일한 테이블 여러 개를 사용할 때 발생할 수 있는 문제점을 해결한다.
- 큰 범위에서는 EQUI JOIN에 포함될 수도 있다.
Oracle SELECT E1.EMPNO, E1.ENAME, E1.MGR, E2.EMPNO AS MGR_EMPNO, E2.ENAME AS MGR_ENAME;
FROM EMP E1, EMP E2
WHERE E1.MGR=E2.EMPNO;

 

2. OUTER JOIN

- 테이블 간 조인 수행에서 조인 기준 열의 어느 한쪽이 NULL이어도 강제로 출력하는 방식이다.

종류 설명 구분 설명 및 예시
LEFT OUTER JOIN - 왼쪽 열을 기준으로 오른쪽 열의 데이터 존재 여부에 상관없이 출력한다. Oracle SELECT E1.EMPNO, E2.EMPNO AS MGR_EMPNO
FROM EMP E1, EMP E2
WHERE E1.MGR=E2.EMPNO(+)
ORDER BY E1.EMPNO;
SQL-99 표준 문법 SELECT E1.EMPNO, E2.EMPNO AS MGR_EMPNO
FROM EMP E1 LEFT OUTER JOIN EMP E2 ON (E1.MGR = E2.EMPNO)
ORDER BY E1.EMPNO;
RIGHT OUTER JOIN - 오른쪽 열을 기준으로 왼쪽 열의 데이터 존재 여부에 상관없이 출력한다. Oracle SELECT E1.EMPNO, E2.EMPNO AS MGR_EMPNO
FROM EMP E1, EMP E2
WHERE E1.MGR(+)=E2.EMPNO
ORDER BY E1.EMPNO;
SQL-99 표준 문법 SELECT E1.EMPNO, E2.EMPNO AS MGR_EMPNO
FROM EMP E1 RIGHT OUTER JOIN EMP E2 ON (E1.MGR = E2.EMPNO)
ORDER BY E1.EMPNO;
FULL OUTER JOIN - 좌우 양쪽 모두를 외부 조인 처리한다. Oracle - 기본적으로 양쪽 모두를 외부 조인하는 문법은 (+) 기호를 사용한 방식으로는 구현할 수 없다.
- 그러나 왼쪽 외부 조인을 사용한 SELECT문과 오른쪽 외부 조인을 사용한 SELECT문을 집합 연산자 UNION으로 합쳐서 같은 효과를 낼 수 있다.
SQL-99 표준 문법 SELECT E1.EMPNO, E2.EMPNO AS MGR_EMPNO
FROM EMP E1 FULL OUTER JOIN EMP E2 ON (E1.MGR = E2.EMPNO)
ORDER BY E1.EMPNO;

 

3. 세 개 이상의 테이블을 조인할 때

구분 예시
Oracle FROM TABLE1, TABLE2, TABLE3
WHERE TABLE1.COL = TABLE2.COL
AND TABLE2.COL = TABLE3.COL
SQL-99 표준 문법 FROM TABLE1 JOIN TABLE2 ON (조건식)
JOIN TABLE3 ON (조건식)

 

4. 조인 테이블 개수와 조건식 개수의 관계

- 조인 조건을 제대로 지정하지 않으면 데카르트 곱 때문에 정확히 연결되지 않아서 필요 없는 데이터까지 모두 조합되어 출력된다.

- 데카르트 곱 현상이 일어나지 않게 하는데 필요한 조건식의 최소 개수 = 조인 테이블 개수 -1

 

4.1 데카르트 곱(Cartesian product)

- 각 집합의 원소들이 서로 곱해져서 만들어진 곱집합을 의미한다.

- 카테시안 곱이라고도 불리며, 조인 이름으로는 CROSS JOIN이라고 한다.

 

참고

- 『오라클로 배우는 데이터베이스 입문』

- https://blog.edit.kr/m/entry/Oracle-%EC%BF%BC%EB%A6%AC%EC%A4%91%EC%97%90-%EC%9D%98-%EC%9D%98%EB%AF%B8?category=290081

- https://upcake.tistory.com/180

'Database' 카테고리의 다른 글

Oracle 테이블 및 데이터 복사  (0) 2021.10.21
Subquery  (0) 2021.10.20
Oracle 그룹화 함수  (0) 2021.10.15
Oracle 다중행 함수  (0) 2021.10.15
Oracle 단일행 함수  (0) 2021.10.12