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이라고 한다.
참고
- 『오라클로 배우는 데이터베이스 입문』
'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 |