본문 바로가기

IT/Database

[Oracle] SQL 문 - Join 의 종류 (natural, inner, outer, cross)

  CROSS JOIN


Cartesian Product 값을 얻을때 사용 한다.

 

-- 아래 SQL문장을 실행해 보자 

SQL> SELECT ename

     FROM emp CROSS JOIN dept

   



INNER JOIN


·         - 일반 조인시 ,(콤마)를 생략하고 INNER JOIN을 추가하고WHERE절 대신 ON절을 사용하면 된다.

·         INNER는 생략 가능 하다.

·         - 아래 두 조인의 결과 값은 같다.

 

--  INNER JOIN 사용한 문장


SQL> SELECT e.empno, e.ename

     FROM dept d INNER JOIN emp e

       ON d.deptno=e.deptno;

 


-- 일반적인 SQL 문장


SQL> SELECT e.empno, e.ename

     FROM dept d , emp e

     WHERE d.deptno=e.deptno;

   



NATURAL JOIN


·         Equi Join과 동일 하다고 보면 된다.

·         - 두 테이블의 동일한 이름을 가지는 칼럼은 모두 조인이 된다.

·         - 동일한 컬럼을 내부적으로 찾게 되므로 테이블 Alias를 주면 오류가 발생 한다.

·         - 동일한 컬럼이 두개 이상일 경우 JOIN~USING 문장으로 조인되는 컬럼을 제어 할 수 있다.

·         - 아래 두 조인의 결과 값은 같다.

 

-- NATURAL JOIN 사용한 SQL 문장.


SQL> SELECT empno, ename, deptno

     FROM emp NATURAL JOIN dept

 


-- 일반적인 SQL 문장


SQL> SELECT e.empno, e.ename, d.deptno

     FROM emp e, dept d

     WHERE e.deptno=d.deptno

   



JOIN ~ USING


·         NATURAL JOIN의 단점은 동일한 이름을 가지는 칼럼은 모두 조인이 되는데USING 문을 사용하면 컬럼을 선택해서 조인을 할 수가 있다.


·         USING절 안에 포함되는 컬럼에 Alias를 지정하면 오류가 발생 한다.

 

-- 일반적인 사용 방법


SQL> SELECT e.empno, e.ename, deptno

     FROM emp e JOIN dept d USING(deptno)

    



ON 구문


·         - 조인 조건을 지정 할 수 있다.


·         - 모든 논리 연산 및 서브쿼리를 지정할 수 있다.

 

-- 테스트를 위해 scott유저에서 아래 insert문장을 실행시킨다.


SQL> INSERT INTO bonus(ename, job, sal) VALUES('SMITH','CLERK',500);

 


-- ON 사용 예제 (multi-table joins)


SQL> SELECT e.empno, e.ename, e.sal

     FROM emp e JOIN dept d  ON (e.deptno=d.deptno)

                JOIN bonus b ON (b.ename = e.ename)

     WHERE e.sal IS NOT NULL