header-img
Info :
  1. JOIN 의 종류
  2. INNER JOIN
  3. LEFT OUTER JOIN
  4. CROSS JOIN
  5. FULL OUTER JOIN
728x90

 

평소 mssql 밖에 접할 일이 없어서 오라클 문법은 생소한데...

조인을 걸 때 (+) 로 표기하는 경우가 있었다.

이게 뭔가 하고 찾아보니

 

우리가 기존에 사용하는 

outer join, inner join, left join 등 지정하여 사용하는 것은 ANSI JOIN 이라고 하고

(+)를 사용하여 조인 종류를 지정하는 것은 Oracle JOIN 이라고 한단다..

 

들어가기에 앞서 SQL JOIN의 종류부터 알아보자.

 

JOIN 의 종류

* INNER JOIN
* LEFT OUTER JOIN
* RIGHT OUTER JOIN
* CROSS JOIN
* FULL OUTER JOIN

 

이렇게 있는데 보통 많이 사용하는 건

INNER JOIN 과 LEFT/RIGHT OUTER JOIN 정도가 되시겠다.

 

두 가지를 예시로 하여 ANSI JOIN 과 ORACLE JOIN의 형태를 비교해보도록 하자.

 

INNER JOIN

 

메인 테이블은 emp 가 되고, 조인 테이블은 dept가 되어 내부 조인을 건 형태를 구현해보도록 하겠다.

 

ANSI JOIN

SELECT a.empno
     , a.ename
     , a.deptno
     , b.dname
  FROM emp a
 INNER JOIN dept b
    ON a.deptno = b.deptno
 WHERE a.job = 'MANAGER'

 

ORACLE JOIN

SELECT a.empno
     , a.ename
     , a.deptno
     , b.dname
  FROM emp a
     , dept b
 WHERE a.job = 'MANAGER'
   AND a.deptno = b.deptno

 

오라클 조인은 조인 칼럼(deptno) 조건을 WHERE 절에 작성하면 되겠다.

 

 

LEFT OUTER JOIN

위와 동일하게 메인 테이블은 emp, 조인 테이블은 dept 가 되고 이를 아우터 조인을 건 케이스를 써보겠다.

 

ANSI JOIN

SELECT a.empno
     , a.ename
     , a.deptno
     , b.dname
  FROM emp a
  LEFT OUTER JOIN dept b
    ON a.deptno = b.deptno
 WHERE a.job = 'MANAGER'

 

ORACLE JOIN

SELECT a.empno
     , a.ename
     , a.deptno
     , b.dname
  FROM emp a
     , dept b
 WHERE a.job = 'MANAGER'
   AND a.deptno = b.deptno(+)

 

조인 테이블 쪽에 (+) 를 붙혀주면 된다.

보기에는 생소해보일지라도 여기 붙혔다 저기 붙혔다 하기가 용이하기 때문에 보통 오라클을 사용하는 곳에서는 

오라클 조인을 많이 사용한다고 한다.

 

여기서 메인 테이블을 바꿀 경우 

ANSI 의 경우 LEFT RIGHT 등등 수정할 부분이 생기는데

ORACLE 의 경우 (+)를 어디에 붙이는가만 바뀌기 때문에...!

 

 

 

+) 추가

CROSS JOIN

ANSI JOIN

SELECT a.empno
     , a.ename
     , b.deptno
     , b.dname
  FROM emp a
 CROSS JOIN dept b
 WHERE a.job = 'MANAGER'

ORACLE JOIN

SELECT a.empno
     , a.ename
     , b.deptno
     , b.dname
  FROM emp a
     , dept b
 WHERE a.job = 'MANAGER'
   AND b.deptno IN (10, 20, 30)

 

오라클 조인에서 크로스 조인을 하기 위해선

FROM절에 테이블을 작성하고 WHERE절에 조인 칼럼을 비워두면 된다.

 

FULL OUTER JOIN

 

풀 아우터 조인은 ANSI 에서만 지원되고 ORACLE JOIN 에서는 지원이 안되므로

참고하여 쿼리를 짜면 좋을 듯 하다.

 

 

 

 

 

728x90
더보기
BACKEND/공부