DB/오라클(Oracle)

[Oracle] 오라클 JOIN 사용법

푸코잇 2023. 12. 4. 20:08

 

정규화를 통해 하나의 테이블을 두 개 이상의 테이블로 분할을 하는 경우가 있다.

이때, 분할한 테이블을 JOIN을 통해 필요한 데이터를 추출할 수 있다.

JOIN에는 오라클 조인과 안시 조인 2가지가 있다.

오라클 조인의 경우 오라클에서만 사용이 가능하며 안시 조인은 국제 표준으로 범용성이 좋다.

 

INNER JOIN

-- 안시조인
SELECT * FROM EMP e 
INNER JOIN DEPT d ON e.DEPTNO = d.DEPTNO;

-- 오라클조인
SELECT * FROM EMP e, DEPT d
WHERE e.DEPTNO = d.DEPTNO;

ORACLE-INNER-JOIN

 

INNER JOIN은 내부조인으로도 불린다. (INNER는 생략 가능)

조건이 일치하는 값이 두 테이블에 모두 존재할 때 조회된다.

즉, EMP, DEPT 테이블에서 DEPTNO가 같으면 조회된다.

 

NATURAL JOIN

-- 안시조인
SELECT * FROM EMP NATURAL JOIN DEPT;

-- INNER JOIN의 USING 사용 시 동일한 결과
SELECT * FROM EMP e 
INNER JOIN DEPT d USING(DEPTNO);

ORACLE-NATURAL-JOIN

 

INNER JOIN을 하면 DEPTNO 칼럼이 2개가 나오는 걸 볼 수 있다.

중복되는 칼럼을 한 개만 맨앞에 출력하는 게 NATURAL JOIN이다.

칼럼이름과 타입이 같으면 알아서 JOIN을 해주기 때문에 조건을 따로 명시하지 않아도 된다.

INNER JOIN에서 ON 대신 USING을 사용하면 NATURAL JOIN과 동일한 결과가 나온다.

 

LEFT OUTER JOIN

-- 안시조인
-- OUTER 생략가능
SELECT * FROM EMP e
LEFT OUTER JOIN DEPT d ON e.DEPTNO = d.DEPTNO;

-- 오라클조인
SELECT * FROM EMP e, DEPT d
WHERE e.DEPTNO = d.DEPTNO(+);

ORACLE-LEFT-OUTER-JOIN

 

LEFT OUTER JOIN은 ON절 조건을 만족하지 않더라도 메인테이블(EMP)의 모든 데이터가 조회된다.

조인 테이블(DEPT)에는 DEPTNO 60이 없으므로 해당 데이터가 NULL로 표시된다.

안시조인에서 OUTER는 생략가능하며, 오라클조인에서는 (+)가 붙은 테이블이 조인 테이블이 된다.

 

RIGHT OUTER JOIN

-- 안시조인
-- OUTER 생략가능
SELECT * FROM EMP e
RIGHT OUTER JOIN DEPT d ON e.DEPTNO = d.DEPTNO;

-- 오라클조인
SELECT * FROM EMP e, DEPT d
WHERE e.DEPTNO(+) = d.DEPTNO;

ORACLE-RIGHT-OUTER-JON

 

RIGHT OUTER JOIN은 LEFT OUTER JOIN의 반대로 이해하면 된다.

메인테이블이 DEPT가 되고 조인 테이블이 EMP가 되어 조인된다.

DEPTNO 40인 EMP 데이터가 없으므로 NULL로 표시된다.

 

FULL OUTER JOIN

-- 안시조인 (오라클조인은 지원하지 않음)
-- OUTER 생략가능
SELECT * FROM EMP e
FULL OUTER JOIN DEPT d ON e.DEPTNO = d.DEPTNO;

FULL-OUTER-JOIN

 

FULL OUTER JOIN은 LEFT OUTER JOIN과 RIGHT OUTER JOIN의 합집합이다.

안시조인에서만 지원하고 오라클조인은 지원하지 않는다.

 

CROSS JOIN

-- 안시조인
SELECT * FROM EMP e
CROSS JOIN DEPT d;

-- 오라클조인
SELECT * FROM EMP e, DEPT d;

CROSS-JOIN

 

CROSS JOIN은 두 테이블의 모든 데이터를 서로 한 번씩 조인한다.

EMP 테이블(14행), DEPT 테이블(4행)인 경우 총 56행이 나오게 된다.