정규화를 통해 하나의 테이블을 두 개 이상의 테이블로 분할을 하는 경우가 있다.
이때, 분할한 테이블을 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;
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);
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(+);
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;
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은 LEFT OUTER JOIN과 RIGHT OUTER JOIN의 합집합이다.
안시조인에서만 지원하고 오라클조인은 지원하지 않는다.
CROSS JOIN
-- 안시조인
SELECT * FROM EMP e
CROSS JOIN DEPT d;
-- 오라클조인
SELECT * FROM EMP e, DEPT d;
CROSS JOIN은 두 테이블의 모든 데이터를 서로 한 번씩 조인한다.
EMP 테이블(14행), DEPT 테이블(4행)인 경우 총 56행이 나오게 된다.
'DB > 오라클(Oracle)' 카테고리의 다른 글
[Oracle] 오라클 뷰(VIEW) 사용법 (0) | 2023.12.09 |
---|---|
[Oracle] 오라클 테이블 구조 및 데이터 복사하기 (2) | 2023.12.06 |
[Oracle] 오라클 서브쿼리(SubQuery) 사용법 (4) | 2023.12.03 |
[Oracle] 오라클 GROUP BY, HAVING 사용법 (2) | 2023.12.02 |
[Oracle] 오라클 CASE WHEN 사용법 (0) | 2023.12.01 |