평소 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 에서는 지원이 안되므로
참고하여 쿼리를 짜면 좋을 듯 하다.