오라클에서 사용되는 조인 종류를 예제와 같이 알려드리겠습니다.
오라클 조인 종류 (ANSI JOIN)
오라클에서 조인의 종류는 크게 4가지로 분류할 수 있습니다.
이해하기 쉽게 집합의 벤 다이어그램의 형태로 표현을 했으니 머리속에서 구상하면서 방향을 잡을때 활용하시면 됩니다.
위의 벤 다이어그램은 ANSI JOIN 을 사용하는 경우를 가정했습니다.
Oracle JOIN 을 사용하는 경우 OUTER JOIN 에서 기능이 제한적입니다.
OUTER JOIN을 사용하는 경우 가급적이면 ANSI JOIN을 사용해 쿼리를 작성하시기 바랍니다.
※ Oracle JOIN 에서 원하는 조건으로 OUTER JOIN 을 수행하려면 별도의 인라인 뷰를 만들어서 조인하거나 스칼라 서브쿼리 등의 방법을 사용해야 하기 때문에 인덱스를 사용하지 못해 복잡하고 대용량의 데이터가 저장된 테이블을 조인하는 쿼리의 경우 성능이 저하될 수 있습니다.
INNER JOIN
흔히 사용하는 조인 방법으로 양쪽 테이블에 조건으로 설정한 키 값이 동일한 결과를 도출합니다. (교집합)
INNER JOIN 만 사용한다면 Oracle JOIN 을 사용하는게 쿼리가 시각적으로 더 깔끔해 보일 수 있습니다. (취향 차이)
※ ANSI JOIN에서 INNER JOIN 과 JOIN은 명칭만 다를뿐 기능이 동일합니다.
개발자의 취향에 따라 INNER 는 생략 가능하지만, 쿼리 유지보수 단계에서 의도를 빠르게 파악하기 위해 번거롭지만 INNER를 붙여서 미래의 누군가에게 도움이 되시길 바랍니다.
LEFT OUTER JOIN
명칭 그대로 왼쪽에 있는 테이블이 메인이 되는 조인입니다.
ON절에 매칭한 키 값과 조건을 기반으로 오른쪽 테이블의 값을 선택적으로 도출합니다. (차집합)
Oracle Join에서는 OUTER JOIN 으로 붙일 컬럼 뒤에 (+)를 붙이면 된다.
- Oracle Join 에서는 LEFT, RIGHT 크게 의미 없음
※ ANSI JOIN에서 LEFT OUTER JOIN 과 LEFT JOIN은 명칭만 다를뿐 기능이 동일합니다.
INNER와 마찬가지로 개발자의 취향에 따라 OUTER 는 생략 가능하지만, 상세한 조건을 걸고 싶다면 쿼리 성능과 가독성을 고려하여 ANSI JOIN 사용을 권장합니다.
RIGHT OUTER JOIN
LEFT OUTER JOIN 과 반대로 오른쪽에 있는 테이블이 메인이 되는 조인입니다.
ON절에 매칭한 키 값과 조건을 기반으로 왼쪽 테이블의 값을 선택적으로 도출합니다. (차집합)
※ 개념을 이해하고 올바르게 쿼리를 작성한다면 JOIN 을 사용할때 메인 테이블의 위치를 자유롭게 설정할 수 있지만, 개념이 헷갈린다면 LEFT, RIGHT OUTER JOIN 중 하나만 사용하는 것을 권장합니다.
※ LEFT JOIN과 동일하게 ANSI JOIN에서 RIGHT OUTER JOIN 과 RIGHT JOIN은 명칭만 다를뿐 기능이 동일합니다.
FULL OUTER JOIN
양쪽 테이블 간에 조인을 하되 데이터의 손실 없이 매칭된 모든 행을 결과로 도출하고 싶을 때 사용합니다. (합집합)
양쪽 테이블의 모든 값을 가져올때 CROSS JOIN을 사용하면 불필요한 값을 가져오고 쿼리 성능이 느려서 FULL OUTER JOIN 사용 후 WHERE 절에 조건을 주면 전체 데이터에서 부분적으로 제외 후 결과 도출이 가능합니다.
위의 예제가 ANSI FULL OUTER JOIN의 기본 사용 방법입니다.
ON절에 조건을 추가하면 조건에 맞는 부분만 조인되고 나머지 데이터는 조인되지 않고 별도의 데이터로 행(값)이 생성 됩니다.
Oracle Join 에서는 FULL OUTER JOIN 을 사용할 수 없습니다.
아우터 조인을 한방향, 한 테이블에만 지정해야 하기 때문입니다.
CROSS JOIN
합집합과는 조금 다르게 각 테이블의 행의 개수를 서로 곱한만큼의 결과가 도출됩니다.
쿼리 성능이 좋지 않으므로 특수한 경우가 아니면 사용을 추천하지 않습니다.
※ Oracle Join 에서는 테이블간 조인할때 매칭되는 키 값을 선언하지 않아 의도치 않게 사용되는 경우가 대부분
OUTER JOIN 사용 시 ANSI, Oracle JOIN 비교
WHERE 절에만 조건을 준다면 조인 이후에 조건에 맞는 데이터만 조회하여 Oracle / ANSI Join의 차이가 없습니다.
ANSI Join 은 ON 절에 조건을 부여하여 조인 조건 설정 가능하여 데이터 구조가 복잡할 때 ANSI Join을 활용하면 수월하게 작업 가능합니다.
복잡한 쿼리에서 Oracle Join을 활용할때 OUTER JOIN을 사용하는 경우 다중 테이블에 조인이 되지 않아 오류가 발생합니다.
그래도 Oracle Join을 사용해야 하는 경우 인라인 뷰로 전체 쿼리를 서브쿼리로 만든 후 OUTER JOIN 을 하면 사용 가능합니다.
'DataBase > Oracle' 카테고리의 다른 글
[Oracle] 오라클 사용자 계정별 권한 조회 방법 및 개념 (시스템, 객체, ROLE) (0) | 2025.08.15 |
---|---|
[Oracle] 오라클 프로시저, 함수, 패키지 내용으로 검색 방법 및 예제 (조건, 주석 키워드로 찾기) (2) | 2025.08.14 |
[Oracle] 오라클 UPDATE 방법 및 예제 (기존 데이터 수정) (3) | 2025.08.03 |
[Oracle] 오라클 INSERT 방법 및 예제 (신규 데이터 생성) (1) | 2025.07.31 |
[Oracle] 오라클 서브 쿼리 종류 및 사용법, 예시 (스칼라 서브 쿼리, 인라인 뷰, 중첩 서브 쿼리) (4) | 2025.07.29 |